如何使用Mockito在java测试中模拟Kotlin单例函数调用?

如何使用Mockito在java测试中模拟Kotlin单例函数调用?,java,kotlin,mockito,junit5,Java,Kotlin,Mockito,Junit5,通常,当我需要模拟静态方法时,我会执行以下操作: @Mock MockedStatic<AdOptions> adOptionsMockedStatic; @BeforeEach void beforeEach(){ adOptionsMockedStatic.when(() -> AdOptions.getFactory(any())).thenReturn(adOptionsFactoryMock); } 它不会触发任何生成问题,但会在运行时崩溃: org.

通常,当我需要模拟静态方法时,我会执行以下操作:

 @Mock
 MockedStatic<AdOptions> adOptionsMockedStatic;

@BeforeEach
void beforeEach(){
   adOptionsMockedStatic.when(() -> AdOptions.getFactory(any())).thenReturn(adOptionsFactoryMock);
}

它不会触发任何生成问题,但会在运行时崩溃:

org.mockito.exceptions.misusing.invalidUseofMatchers异常: 此处检测到错误放置或误用的参数匹配器:


从技术上讲,Kotlin对象函数是实例方法,而不是静态方法。尽管你真的不应该模拟静态方法。在使用/创建库时,没有办法绕过模拟静态方法,特别是在Android上:(

@Mock
        MockedStatic<InterstitialAdCallbackAndListeners> interstitialAdCallbackAndListenersMockedStatic;

@BeforeEach
void beforeEach(){
   adOptionsMockedStatic.when(() -> AdOptions.getFactory(any())).thenReturn(adOptionsFactoryMock);
}