模拟和存根之间有什么区别?
我读过各种关于嘲笑与测试中残段的文章,包括Martin Fowler的Mocks Are Stubs,但仍不明白其中的差别。
存根
我相信最大的区别是你已经用预定的行为写了一个存根。 所以你会有一个类来实现你为了测试目的而伪装的依赖关系(抽象类或接口),而这些方法只会被设置为响应。 他们不会做任何事情,而且你已经在测试之外编写了它的代码。
嘲笑
模拟是你测试的一部分,你必须设置你的期望。 模拟不是以预定的方式设置的,所以你有代码在你的测试中完成。 嘲笑是在运行时确定的,因为设置预期的代码在执行任何操作之前必须运行。
区别
使用mock编写的测试通常遵循initialize -> set expectations -> exercise -> verify
模式进行测试。 虽然预先写好的存根会遵循initialize -> exercise -> verify
。
相似
两者的目的是消除测试类或函数的所有依赖关系,以便让您的测试更加关注并简化他们试图证明的内容。
前言
有几个对象的定义,并不是真实的。 总称是测试双 。 这个术语包含: 虚拟的 , 假的 , 存根 , 模拟 。
参考
根据马丁福勒的文章:
样式
Mocks vs Stubs =行为测试与状态测试
原理
根据每个测试只测试一件事的原则,在一次测试中可能有几个存根,但通常只有一个模拟。
生命周期
测试与存根的生命周期:
使用mocks测试生命周期:
概要
模拟和存根测试都给出了这个问题的答案: 结果是什么?
模拟测试也感兴趣: 结果如何实现?
存根是简单的假物体。 它只是确保测试顺利进行。
模拟是更聪明的存根。 您验证您的测试通过它。