我知道我如何使用这些术语,但是我想知道是否存在可接受的伪造模拟存根用于单元测试的定义?您如何为测试定义这些?描述您可能会使用每种情况的情况。

这是我的用法:

:一个实现接口(interface)但包含固定数据且没有逻辑的类。只需根据实现返回“好”或“坏”数据。

Mock :一个类,该类实现接口(interface)并允许动态设置要返回的值/从特定方法抛出的异常,并提供检查是否已调用/未调用特定方法的能力。

存根:与模拟类类似,不同之处在于它不提供验证是否已调用方法的功能。

模拟和存根可以手动生成,也可以由模拟框架生成。伪类是手工生成的。我主要使用模拟来验证我的类和依赖类之间的交互。一旦验证了交互作用并测试了代码中的替代路径,便会使用存根。我主要使用伪造的类来抽象出数据依赖性,或者当模拟/存根过于繁琐而无法每次设置时。

最佳答案

您可以获得一些信息:
Martin Fowler about Mock and Stub
对象实际上具有有效的实现,但是通常采取一些捷径,这使其不适用于生产
存根为测试期间进行的 call 提供固定的答案,通常根本不响应测试中编程的内容。存根还可以记录有关 call 的信息,例如电子邮件网关存根,它可以记住“已发送”的消息,或者仅记住“已发送”的消息数量。
mock 是我们在这里所说的:用期望预先编程的对象,这些对象形成了期望接收的 call 的规范。
xunitpattern:
伪造的:我们获取或构建与SUT所依赖的组件所提供的功能相同的轻量级实现,并指示SUT使用它而不是真实的。
存根:此实现被配置为使用将在SUT中执行未经测试的代码(请参阅第X页的生产错误)的值(或异常)响应来自SUT的调用。使用测试存根的一个关键指示是由于无法控制SUT的间接输入而导致未测试代码
模拟对象,实现与SUT(被测系统)所依赖的对象相同的接口(interface)。当我们需要进行行为验证时,可以使用模拟对象作为观察点,以避免因无法观察调用方法对SUT的副作用而导致未经测试的需求(请参阅第X页的生产错误)。
亲身
我尝试通过使用简化:模拟和存根。当它是一个返回设置为测试类的值的对象时,我会使用Mock。我使用Stub模仿要测试的Interface或Abstract类。实际上,您所说的并不重要,它们都是生产中不使用的类,并且用作测试的实用程序类。

10-04 22:33