Ozk*_*kan 12 .net unit-testing
任何人都可以非常清楚地告诉我在单元测试期间a shim和a 之间的主要区别是stub什么?
我知道有关模拟对象的内容,并且我读到了关于垫片和存根的内容,但是我仍然不清楚在哪个上下文中我应该使用垫片或存根.
让我引用Martin Fowler的文章Mocks Are not Stubs:
存根提供了在测试期间进行的调用的固定答案,通常不会对测试中编程的任何内容做出任何响应.存根还可以记录有关呼叫的信息,例如记住它'发送'的消息的电子邮件网关存根,或者可能只记录它'发送'的消息.
模拟是预编程的对象,具有预期,形成了预期接收的调用的规范.
因此,如果违反预期,模拟可以直接使测试失败.存根不会这样做.
垫片(或Moles)与它们的不同之处在于它们可用于替换静态方法等硬编码依赖关系.您应该避免使用IMO并且更喜欢重构,这使得这些依赖项可以替换.请参阅此主题以获得进一步讨论,尤其是Jim Cooper的回答.