因此,继续执行我的新决议,以更多地参与TDD,我现在开始与Rhino Mocks合作。
我热衷于做的一件事是确保我确实了解自己将要从事的工作,因此我想检查一下我对到目前为止所见内容的理解(我认为将其作为一个完整的内容会很好。资源)。
因此,继续执行我的新决议,以更多地参与TDD,我现在开始与Rhino Mocks合作。
我热衷于做的一件事是确保我确实了解自己将要从事的工作,因此我想检查一下我对到目前为止所见内容的理解(我认为将其作为一个完整的内容会很好。资源)。
Answers:
马丁·福勒(Martin Fowler)在这个问题上写了一篇很棒的文章。从那篇文章:
Meszaros使用术语Test Double作为测试对象代替真实对象使用的任何假装对象的通用术语。该名称源于电影中的“特技替身”概念。(他的目标之一是避免使用任何已经被广泛使用的名称。)然后,Meszaros定义了四种特殊的double类型:
- 虚拟对象可以传递,但从未实际使用过。通常它们仅用于填充参数列表。
- 伪对象实际上具有有效的实现,但是通常采取一些捷径,这使它们不适合生产(内存数据库就是一个很好的例子)。
- 存根提供对测试期间进行的呼叫的固定答复,通常通常根本不响应为测试编程的内容。存根还可以记录有关呼叫的信息,例如电子邮件网关存根,它可以记住“已发送”的消息,或者仅记住“已发送”的消息数量。
- 嘲笑是我们在这里谈论的内容:对象被预编程并带有期望,这些期望形成了期望接收的呼叫的规范。
用我自己的话来说:模拟对象“期望”要在其上调用的某些方法,并且如果不满足他们的期望,通常会导致单元测试失败。存根对象提供固定的响应(并且可以由帮助程序库自动生成),但通常不会直接导致单元测试失败。通常仅使用它们,以便您正在测试的对象获取完成其工作所需的数据。
“存根”是接口的实现,该接口存在以提供数据/某种响应。例如:
通常,这将由另一个服务(例如Web服务,另一个应用程序,数据库)提供,但是为了提高代码的可测试性,结果是“伪造的”。
这样做的主要好处是,它允许在单元测试中根据期望的数据进行断言。如果由于数据错误而导致错误,则可以轻松地添加测试,创建新的存根(复制数据错误),并生成纠正错误的代码。
存根与Mocks的不同之处在于,存根用于表示和测试对象的状态,而Mock则用于测试其交互。
我相信“存根”来自STartUpBlock。它用于指代自动生成的代码部分,以帮助您(开发人员)入门。
“存根”或“存根方法”被设计为入门代码或临时替代尚待开发的代码。这是由IDE生成的内置代码。存根方法实际上是用于测试特定类的方法的方法。通过在您实际的开发方法中为局部变量输入一些值并检查输出是否正确来使用它。在代码中查找错误很重要。
我最近遇到了这个问题,并且认识到Stub和Driver之间的这种比较确实很清楚并且很有帮助:
基本上,存根和驱动程序是例程,除了声明自己和接受的参数外,它们实际上不做任何事情。然后,其余代码可以采用这些参数并将其用作输入。
+ --------- + ------------------------------- + ------- ------------------------ + | | 存根| 驱动程序 + --------- + ------------------------------- + ------- ------------------------ + | 类型 虚拟代码| 虚拟代码| + --------- + ------------------------------- + ------- ------------------------ + | 用于 自上而下的集成| 自下而上的整合| + --------- + ------------------------------- + ------- ------------------------ + | 目的| 允许测试鞋面| 允许测试较低的| | | 级别的代码,当| 级别的代码,当| | | 较低级别的代码是| 代码的上层是| | | 尚未开发。| 尚未开发。| + --------- + ------------------------------- + ------- ------------------------ + | 例子 A和B是组件。| A和B是组件。| | | A ---> B | A ---> B | | | | | | | 已经开发了。| 仍然需要开发。 | | B仍然需要开发。B已开发。| | | 因此,使用存根| 因此,使用驱动程序| | | 代替B模仿它。| 代替A模仿| | | | | | | A --->存根| 驱动程序---> B | + --------- + ------------------------------- + ------- ------------------------ +