### Mock模拟测试使用 #### 一、Mock是什么 Mock是一种软件测试技术,它涉及使用模拟对象来代替实际对象,以简化测试过程中的依赖性管理。在软件开发中,特别是面向对象编程中,类通常与其他类有复杂的交互。为了有效地测试这些类的功能,而不受其依赖项的影响,开发人员会使用Mock对象。Mock对象可以预设行为,如返回特定值或抛出异常,并且可以验证是否按预期的方式进行了调用。 #### 二、Mock的关键点 ##### 2.1、Mock对象 Mock对象是一个虚拟对象,它模拟真实对象的行为。通过配置这些对象,开发者可以控制它们的输出,并验证与它们交互的代码是否按照预期运行。Mock对象的主要用途是在测试过程中代替真实的依赖项。 ##### 2.2、Stub(桩) 与Mock对象不同,Stub(桩)主要用于提供固定的响应,而不是关注方法的调用细节。例如,当一个方法需要调用远程服务获取数据时,可以使用一个返回固定数据的Stub来替代远程调用,以避免网络请求的开销和不确定性。 ##### 2.3、举例 假设有一个`TemperatureService`类,其中包含一个`getTemperature`方法,该方法调用`TemperatureRead`方法获取温度数据。如果`TemperatureRead`方法需要与外部硬件交互,而该硬件尚未准备就绪,可以使用Stub来替代: ```java public double TemperatureRead(String position) { return 28; // 假设默认温度为28度 } ``` ##### 2.3、设置预期 在使用Mock对象时,可以通过设置预期来规定方法应该被调用的次数、传递的参数以及应返回的结果。这样可以在测试中确保代码的行为符合预期。 ##### 2.4、验证预期的结果 验证是指在测试完成后检查Mock对象的行为是否符合之前设置的预期。例如,可以验证某个方法是否被正确地调用了特定次数。 #### 三、Mock的好处是什么 ##### 3.1、提前创建测试;TDD(测试驱动开发) 使用Mock对象可以实现测试驱动开发(TDD)。这意味着开发者可以在编写生产代码之前先编写测试代码,从而更好地设计和组织代码结构。 ##### 3.2、团队可以并行工作 通过使用Mock对象,不同的团队成员可以同时进行开发和测试工作,无需等待其他团队完成其部分的工作。这提高了开发效率,并有助于更快地交付高质量的软件产品。 ##### 3.3、你可以创建一个验证或者演示程序 Mock对象可以帮助创建快速原型或演示程序,用于验证概念或向客户展示。这种做法有助于在早期阶段发现问题并作出相应的调整。 ##### 3.4、为无法访问的资源编写测试 在某些情况下,可能无法访问某些资源(如数据库或外部API),此时可以使用Mock对象来模拟这些资源的行为。这种方法不仅提高了测试速度,还减少了对外部因素的依赖。 ##### 3.5、Mock可以交给用户 通过提供Mock对象,可以让最终用户在没有完全部署的系统中体验应用程序的部分功能。这对于收集用户反馈非常有用,可以帮助开发团队更好地理解用户的需求和期望。 #### 四、Mockito Mockito是一个流行的Java单元测试框架,用于轻松创建和管理Mock对象。它简化了许多常见的Mock操作,如设置预期行为和验证方法调用。 ##### 4.1、创建Mock对象 使用Mockito创建Mock对象非常简单。只需使用`@Mock`注解或`Mockito.mock()`方法即可创建Mock对象。 ##### 4.2、示例 以下是一个简单的例子,展示了如何使用Mockito创建Mock对象并设置预期行为: ```java import org.mockito.Mockito; public class TemperatureServiceTest { @Mock private TemperatureReader temperatureReader; @Before public void setUp() { MockitoAnnotations.initMocks(this); } @Test public void testGetTemperature() { Mockito.when(temperatureReader.readTemperature("location")) .thenReturn(28.0); double temperature = new TemperatureService(temperatureReader).getTemperature("location"); assertEquals(28.0, temperature); } } ``` #### 五、Mockito使用 ##### 5.1、设置Mock对象期望和返回值 使用`when(...).thenReturn(...)`方法可以设置Mock对象的预期行为。例如,可以设置一个方法在接收到特定参数时返回特定值。 ##### 5.2、另外一种写法doReturn() 除了`when(...).thenReturn(...)`之外,还可以使用`doReturn(...).when(...)`来设置Mock对象的行为。这种方式特别适用于处理方法的副作用,如返回特定值。 ##### 5.4、参数匹配器 Mockito还支持参数匹配器,允许更灵活地设置方法调用的预期条件。例如,可以使用`anyString()`匹配任何字符串参数。 #### 六、Mock对象的行为验证 验证Mock对象的行为是测试中的一个重要步骤。Mockito提供了多种验证方法,如`verify(...)`来确保方法按预期被调用。 #### 七、Spy对象验证 除了Mock对象,Mockito还支持Spy对象。Spy对象是对现有对象的封装,可以监控和修改其行为,同时保留对象的真实行为。这对于需要测试对象内部状态的情况特别有用。使用`@Spy`注解或`Mockito.spy()`方法可以创建Spy对象。























剩余11页未读,继续阅读

- lison_2020-05-27之前下载的,给个好评

- 粉丝: 54
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 网络文学中的古典文学传统.docx
- [建造师]一级《建设工程项目管理》试题.doc
- 综合布线系统工程参考大全.doc
- 计算机科学与技术在数据管理领域的运用研究.docx
- 企业信息化建设中的标准资源发展策略研究.docx
- 这里是一些学习自动驾驶及工作的资料,主要是一些书籍
- 信息化建设的步骤.doc
- 单片机的多路无线遥控节能灯控制器研究与设计开发.doc
- Flet增删改查数据表进行数据管理的框架自定义组件模板
- 计算机安全论文-浅议数据加密技术与计算机安全.doc
- 软件工程导论重点内容.doc
- 在Linux下安装配置Oracle11gR2.doc
- 数据库课程实施方案任务书.doc
- 电网调度自动化知识竞赛复习题库.doc
- 数字通信原理课后习题标准答案.doc
- 射频技术与应用移动通信中的射频技术.doc


