jhe*_*cks 2 tdd mocking stub mockito
我只是在阅读Martin Fowler的帖子Mocks Are Not Stubs.他定义了不同的测试双打(或者更确切地说是参考Gerard Meszaros的xUnit模式书):
- 虚拟对象传递但从未实际使用过.通常它们仅用于填充参数列表.
- 假对象实际上有工作实现,但通常需要一些使它们不适合生产的快捷方式(内存数据库就是一个很好的例子).
- 存根提供了在测试期间进行的调用的固定答案,通常不会对测试中编程的任何内容做出任何响应.存根还可以记录有关呼叫的信息,例如记住它'发送'的消息的电子邮件网关存根,或者可能只记录它'发送'的消息.
- 模拟是......预编程的对象,具有预期,形成了预期接收的调用的规范.
我的问题的第一部分是,这甚至是权威的吗?这种语言被广泛使用和理解吗?
我的问题的第二部分是,似乎我的选择模拟框架Mockito,很容易模糊线条,当然在模拟和存根之间.
我问的原因是我试图根据我上面提到的四个事情来命名我的双打,但有时会混淆某些东西是否真的具有存根或模拟的作用.那么,这是Mockito的缺陷,还是这就是事情的演变方式,这种区别并不重要?
实际上,这是Mockito的力量.Mockito mock是一个对象,您可以在其上"存根"方法,或"验证"方法,或两者兼而有之.(对于相同的方法,两者都是代码味道,但这是另一个主题).因此,Mockito模拟既是"存根"(在Martin Fowler意义上)又是"模拟"(在Martin Fowler意义上); 但你不必同时使用它.通常,Mockito模拟将充当"存根",或充当"模拟"; 两者都少.
在其他一些模拟框架中,您没有这种灵活性.如果你想在模拟上进行"验证",你还必须做"存根".在这些框架中,模拟必须既作为"存根"又作为"模拟".据我了解,促使Szczepan Faber创造Mockito的因素之一是希望能够分离"存根"行为和"模拟"行为(严格的Martin Fowler对这两个词的感觉).