Junit中mock方法的原理

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));
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容