ActiveRecord::Base
有一个很大的 API,有多种查找和保存对象的方法。例如,您的AR::B
对象可能已从多个方法实例化:
Foo.new(…)
Foo.create(…)
Foo.find(…)
Foo.find_by_sql(…)
Foo.find_[all_]by_*(…)
bar.foos
(协会)- ……当然还有关于关联的查找器方法
同样,有问题的对象可能会通过几种不同的方法持久化:
foo.create
或者foo.create!
foo.save
或者foo.save!
foo.update_attributes
或者foo.update_attributes!
现在,在编写单元测试时,最好将外部方法调用存根,这样您的测试就可以专注于相关方法的业务逻辑。然而,当涉及到使用AR::B
对象时——例如在控制器单元测试中——似乎你必须提交上述方法之一,而实际上就方法的业务逻辑而言,它不应该是重要的您选择的。
您是否必须将您的方法的行为与其实现紧密结合起来,还是我错过了一些简单的东西?