在我的Rails 4项目中,我有一个模型EventGenerator
,其实例方法generate
(在数据库中创建了一些记录)和类方法generate_all
这是由Rake任务调用的,看起来像这样:
def self.generate_all
all.each(&:generate)
end
我可以想到几种测试方法(我使用RSpec 3和Fabrication):
EventGenerator
个实例,并使用any_instance.should_receive(:generate)
作为断言 - 但RSpec 3 now recommends against this并需要一个软糖才能使其正常工作。这是一个个人的展示项目'所以,如果可能的话,我希望一切都是最佳实践。另外(DHH除外)不应该仍然可以创建不接触数据库的快速模型规格吗?EventGenerator.all
删除以返回某些实例。但对被测试的课程进行抄袭是不好的,对吧?而且很脆弱。由于我无法想到选项4的缺点,或许这就是答案,但我觉得我需要一些科学来支持它。
答案 0 :(得分:0)
我实际上不会费心去测试它(所以你的1.),因为这个方法非常简单。
如果你想让它在测试范围内,但我建议你使用你的3.我的理由如下:
.generate_all
的测试只需要声明方法#generate
可以调用.all
返回的每个实例。在这种情况下,.all
的实际实现是无关紧要的,可以存根。#generate
的测试应断言该方法是正确的。如果这些测试断言此方法的正常运行,则.generate_all
的测试不需要复制任何断言。#generate
的测试中测试.generate_all
的正常运行会导致测试之间出现不必要的依赖关系。