本文概述
模拟
模拟是存储方法调用的对象。它称为测试中使用的依赖项的动态包装。它用于记录和验证Java类之间的交互。模拟被称为测试双打的最强大和最灵活的版本。我们使用的一种模拟方法称为mock()。
使用模拟的主要功能是, 它可以完全控制模拟对象的行为。模拟对象通常用于行为验证。术语行为是指检查应用于对象的正确方法和路径。
模仿通常是通过使用库或模拟框架(如Mockito, JMock和EasyMock)来创建的。它用于测试存根不足的大量测试。模拟的基本功能之一是, 我们可以验证给定方法的调用次数。
以下代码段显示了如何使用模拟()。
ToDoService doService = mock(ToDoService.class);
存根
存根是保存预定义数据并在测试过程中使用它提供响应的对象。换句话说, 存根是一个类似于真实对象的对象, 它具有测试所需的最少方法。当我们不想使用会对真实数据做出响应的对象时, 就会使用存根。存根被认为是最轻的, 并且测试的最静态版本加倍。
存根的主要功能是:
- 无论输入如何, 它总是返回预定义的输出。
- 它可以用来类似于数据库对象。
- 存根用于减少在创建真实对象期间发生的复杂性。它们主要用于执行状态验证。
监控
监控被称为部分模拟对象。这意味着监控通过对真实对象进行存根或监视来创建真实对象的部分对象或一半虚拟对象。在监视中, 真实对象保持不变, 我们仅监视它的某些特定方法。换句话说, 我们采用现有的(真实的)对象, 并仅替换或监视其某些方法。
当我们有一个装满方法的巨大类并且想要模拟某些方法时, 监控很有用。在这种情况下, 我们应该更喜欢使用监控而不是模拟和存根。如果方法没有存根, 它将调用实际的方法行为。
在Mockito中, spy()方法用于创建监控对象。它允许我们调用真实对象的常规方法。以下代码段显示了如何使用spy()方法。
List spyArrayList = spy(ArrayList.class);
Stub和Mock之间的区别
参数 | 存根 | 模拟 |
---|---|---|
数据源 | 存根的数据源是硬编码的。它通常与测试套件紧密耦合。 | 模拟中的数据由测试设置。 |
由…制作 | 存根通常是手写的, 有些是由工具生成的。 | 通常使用第三方库(例如Mockito, JMock和WireMock)来创建模拟。 |
用法 | 存根主要用于简单的测试套件。 | 模拟程序主要用于大型测试套件。 |
Graphics User Interface (GUI) | 存根没有GUI。 | 模拟者具有GUI。 |
以下是模拟和监控之间的一些区别:
参数 | 模拟 | 监控 |
---|---|---|
用法 | 模拟用于创建完全模拟或虚拟对象。它主要用于大型测试套件中。 | 监控用于创建部分或一半的模拟对象。像模拟一样, 监控也用于大型测试套件中。 |
默认行为 | 使用模拟对象时, 方法的默认行为(不加桩时)为不执行任何操作(不执行任何操作)。 | 使用监控对象时, 方法的默认行为(未加桩时)是实际的方法行为。 |
在之前的教程中, 我们讨论了存根, 模拟和监视的一些示例。为了更好地理解存根, 模拟和监控之间的区别, 请看一下示例。
评论前必须登录!
注册