JUnit 中的 Mock 方法实现主要依赖于 Mockito 框架,Mockito 是一个流行的 Java 测试框架,用于创建和管理测试中的模拟对象(Mocks)。Mockito 的原理如下:
1. 动态代理:
Mockito 使用 Java 的动态代理机制来创建模拟对象。动态代理是一种在运行时创建代理对象的技术,它可以在不改变原始类的情况下为其创建代理对象,以拦截对原始类方法的调用。通过动态代理,Mockito 可以在运行时生成模拟对象并拦截模拟对象上的方法调用。
2. Mock 对象的创建:
Mockito 通过调用静态方法 Mockito.mock() 来创建模拟对象。在创建模拟对象时,Mockito 会生成一个代理对象,代理对象实现了被模拟类的接口或是继承了被模拟类的父类,从而可以用作被测试类中依赖的对象。
3. 方法调用拦截:
当测试代码调用模拟对象的方法时,实际上是调用了代理对象的方法。Mockito 的代理对象会拦截这些方法调用,并根据预先定义的行为返回模拟的结果。
4. 行为定义:
在创建模拟对象后,我们可以使用 Mockito 提供的 API 来定义模拟对象的行为。例如,我们可以使用 when() 方法来定义模拟对象的方法在被调用时返回的结果。可以使用 thenReturn()、thenThrow() 等方法来指定返回值或抛出异常。
5. 验证调用:
在测试中,我们可以使用 Mockito 提供的 verify() 方法来验证模拟对象的方法是否被正确调用。例如,我们可以验证模拟对象的某个方法被调用了几次,或者被调用的顺序等。
总体而言,Mockito 的原理是通过动态代理技术创建模拟对象,并拦截模拟对象上的方法调用,根据预先定义的行为返回模拟结果。这样,我们可以在测试中模拟依赖对象的行为,使得测试更加灵活、可控,从而更容易编写全面的单元测试。
Mock方法的使用
验证方法没有被调用
verifyZeroInteractions(eventBusiness.publishEventMessage(ExceptionTypeEnum.BUSINESS, receiveResultBO.getErrorCode(), receiveResultBO.getErrorMessage(), JSON.toJSONString(receiveActionBO)));
verify(eventBusiness, times(0)).publishEventMessage(ExceptionTypeEnum.BUSINESS, receiveResultBO.getErrorCode(), receiveResultBO.getErrorMessage(), JSON.toJSONString(receiveActionBO));
verify(eventBusiness, never()).publishEventMessage(ExceptionTypeEnum.BUSINESS, receiveResultBO.getErrorCode(), receiveResultBO.getErrorMessage(), JSON.toJSONString(receiveActionBO));