spring 如何模拟ServiceBusReceiverAsyncClient以进行单元测试?

fcg9iug3  于 12个月前  发布在  Spring
关注(0)|答案(1)|浏览(116)

使用Java和SpringBoot,我试图为使用ServiceBusReceiverAsyncClient的方法创建单元测试,但Mockito无法创建Mock,因为该类是final类。

@Mock
private ServiceBusReceiverFactory factory;

@Test
void test() {
    ServiceBusReceiverAsyncClient mockedReceiver = Mockito.mock(ServiceBusReceiverAsyncClient.class)
    when(this.factory.getClient()).thenReturn(mockedReceiver);
 
    consumer.listen(ack);
    //calls the ServiceBusReceiverAsyncClient.receivedMessages() that calls ack.

    verify(ack, atLeastOnce().success());
   

}

字符串

uidvcgyl

uidvcgyl1#

模拟final类型、枚举和final方法(自2.1.0起)
Mockito现在默认支持mocking final类和方法。这是一个奇妙的改进,展示了Mockito对改善测试体验的永恒追求。我们的目标是Mockito“只工作”于final类和方法。以前它们被认为是“不可mockable”的,防止用户mocking。从5.0.0开始,默认情况下启用此功能。此替代mock maker使用Java插装API和子类化的组合,而不是创建一个新类来表示mock。这样,就可以模拟最终类型和方法。
在5.0.0之前的版本中,这个mock maker默认关闭,因为它基于完全不同的mock机制,需要更多的社区反馈。它可以通过mockito扩展机制显式激活,只需在classpath中创建一个包含值mock-maker-inline的文件/mockito-extensions/org.mockito.plugins.MockMaker
为了方便起见,Mockito团队提供了一个工件,其中预先配置了这个mock maker。不要使用 mockito-core 工件,而是在项目中包含 mockito-inline 工件。请注意,一旦最终类和方法的mock集成到默认的mock maker中,这个工件可能会停止使用。

相关问题