Fen*_*ndo 5 ruby tdd unit-testing mocking
假设我有一个使用以下伪代码定义的类和方法
class Book
def quick_info
return title + " " + author
end
end
Run Code Online (Sandbox Code Playgroud)
如果我在使用这个类的其他类上编写单元测试,Book我会为方法调用创建一个存根Book.quick_info.
现在我想如果我的Book类要改变,就会出现问题,例如,如果quick_info方法被重命名为short_description.我的单元测试仍然会使用quick_info,看起来我的测试通过就好了,实际上它应该是失败的.
我想知道是否有一些东西可以运行来验证我的测试中的存根/模拟实际上是由正确的类和方法组成.也许这样的东西可以在持续集成服务器上运行,只是为了验证事情是否匹配?
嗯....现在我想到了一个想法.甚至可以创建一个不存在的mock/stubbed方法吗?如果没有,那么整个问题都没有实际意义.
编辑:
我只是尝试使用rspec 2,我知道我可以创建一个Book实例并创建一个名为的方法i_dont_exist,我可以调用它.所以我的问题仍然存在.有没有办法验证我的模拟/存根是否匹配真正存在的类/对象?
Mocha 有一个选项:
Mocha::Configuration.prevent(:stubbing_non_existent_method)
Run Code Online (Sandbox Code Playgroud)
尽管它需要您模拟现有对象。如果您从“从头开始”创建模拟,它将无法工作(因为它不知道应该有什么方法)。
就最佳实践而言,恕我直言,您从错误的方向看待它。您还应该对 Book 类进行单元测试,因此当您重命名该方法时,您将会遇到测试失败。这应该是足够强的信号来“grep”代码以查看是否有更多调用此方法。
另外(除非这只是一个例子)你为什么要模拟 Book 呢?它只是一个数据 - 您通常想要模拟外部服务等,并在测试中使用真实的数据对象。
| 归档时间: |
|
| 查看次数: |
131 次 |
| 最近记录: |