给定两个使用模板方法设计模式的类:
def Parent
def all_params
params.merge(extra_params)
end
def params
{blah: "cool"}
end
def extra_params
{}
end
end
def Child < Parent
def extra_params
{edmund: "coolest"}
end
end在Rspec中测试它的正确方法是什么?我应该像这样创建shared_examples_for "a parent",然后在两个类中使用it_should_behave_like 'a parent'进行测试吗?
shared_examples_for "a parent" do
describe "#params" do
expect(subject.params).to eq (...)
end
describe "#all_params" do
expected_params = subject.all_params.merge(subject.extra_params)
expect(subject.all_params).to eq expected_params
end
end
describe Parent do
subject { Parent.new }
it_should_behave_like 'a parent'
describe "#extra_params" do
expect(subject.extra_params).to eq {}
end
end
describe Child do
subject { Child.new }
it_should_behave_like 'a parent'
describe "#extra_params" do
expect(subject.extra_params).to eq {edmund: 'coolest'}
end
end或者我应该测试Child是否是父对象,并且只测试它覆盖的钩子方法?
describe Parent do
subject { Parent.new }
describe "#params" do
expect(subject.params).to eq (...)
end
describe "#all_params" do
expected_params = subject.all_params.merge(subject.extra_params)
expect(subject.all_params).to eq expected_params
end
describe "#extra_params" do
expect(subject.extra_params).to eq {}
end
end
describe Child do
subject { Child.new }
it "is a Parent" do
expect(subject).to_be kind_of(Parent)
end
describe "#extra_params" do
expect(subject.extra_params).to eq {edmund: 'coolest'}
end
end发布于 2015-06-26 22:09:34
这是一个选择的问题。就我个人而言,我为父类创建共享示例,然后为父类创建共享示例,例如Animal
include_examples 'Animal'例如,对于Badger < Animal
it_behaves_like 'Animal'第一个将示例包含到当前上下文中,而第二个将示例包装在behaves like Animal上下文中。
发布于 2015-06-27 02:08:14
我更喜欢第二个例子。在Child中使用it_behaves_like "a parent"是重复的,本质上只是测试继承在Child中是否有效。
https://stackoverflow.com/questions/31075145
复制相似问题