所以我对ruby很新,我正在为我正在创建的对象编写一些rspec测试用例。很多测试用例都是相当基础的,我只想确保正确填充和返回值。我想知道我是否有办法用循环结构来做这件事。而不是必须为我想测试的每个方法都有一个assertEquals。
对于instace:
describe item, "Testing the Item" do
it "will have a null value to start" do
item = Item.new
# Here I could do the item.name.should be_nil
# then I could do item.category.should be_nil
end
end
但我想要一些方法来使用数组来确定要检查的所有属性。所以我可以做类似
的事情propertyArray.each do |property|
item.#{property}.should be_nil
end
这或类似的东西会起作用吗?感谢您的任何帮助/建议。
答案 0 :(得分:6)
object.send(:method_name)
或object.send("method_name")
将有效。
所以在你的情况下
propertyArray.each do |property|
item.send(property).should be_nil
end
应该做你想做的事。
答案 1 :(得分:1)
如果你这样做
propertyArray.each do |property|
item.send(property).should be_nil
end
在单个规范示例中,如果您的规范失败,那么将很难调试哪个属性不是nil或什么失败。更好的方法是为每个属性创建一个单独的规范示例,如
describe item, "Testing the Item" do
before(:each) do
@item = Item.new
end
propertyArray.each do |property|
it "should have a null value for #{property} to start" do
@item.send(property).should be_nil
end
end
end
这会将您的规范作为每个属性的不同规范示例运行,如果失败,那么您将知道失败的原因。这也遵循每个测试/规范示例的一个断言规则。
答案 2 :(得分:1)
关于Object#send()
...
您也可以为方法调用指定参数...
an_object.send(:a_method, 'A param', 'Another param')
我喜欢使用另一种形式__send__
,因为“发送”非常常见......
an_object.__send__(:a_method)