all*_*ode 21
一个假的具有相同的行为,它代替的东西.
一个存根有一个"固定"设定的"罐头"响应特定于你的测试(S).
一个模拟有一组关于由呼叫的预期.如果不满足这些期望,则测试失败.
所有这些都是相似的,因为它们取代了在测试用途下编码的生产合作者.
套用 Roy Osherove 在他的书《单元测试的艺术》(第二版)中的话:
赝品是指模仿其他物体而制作的任何物体。假货可以用作存根或模拟。
存根是一个假的,它提供给您正在测试的类以满足其要求,但在单元测试中会被忽略
模拟是提供给您正在测试的类的伪造品,并将作为单元测试的一部分进行检查以验证功能。
例如,MyClass您正在测试的类可能会使用本地记录器和第三方 Web 服务作为其操作的一部分。您可以创建 aFakeLogger和 a FakeWebService,但它们的使用方式决定它们是存根还是模拟。
可以FakeLogger用作存根:它被提供给MyClass记录器并假装是记录器,但实际上忽略所有输入,否则只是为了MyClass正常运行。您实际上并没有检查FakeLogger单元测试,就您而言,它是为了让编译器关闭。
它FakeWebService可以用作模拟:您将其提供给MyClass,并在您调用的一个单元测试中调用MyClass.Foo()该测试,该测试应该调用第三方 Web 服务。为了验证是否发生了这种情况,您现在检查您的FakeWebService电话,看看它是否记录了它应该收到的呼叫。
请注意,其中任何一个都可以颠倒,具体取决于您在特定单元测试中测试的内容。如果您的单元测试正在测试正在记录的内容,那么您可以制作一个FakeLogger尽职尽责地记录它所告诉的所有内容的文件,以便您可以在单元测试期间询问它;现在这是一个模拟。在同一个测试中,您可能不关心第三方 Web 服务何时被调用;你FakeWebService现在是一个存根。因此,如何填写 fake 的功能取决于它是否需要用作存根或模拟或两者兼而有之。
总结一下(直接引用书中的内容):
假对象是一个通用术语,可用于描述存根或模拟对象,因为它们看起来都像真实对象。。。。基本区别在于存根不会使测试失败。模拟可以。
其余的都是实施细节。
这可能有所帮助
| 归档时间: |
|
| 查看次数: |
7926 次 |
| 最近记录: |