我目前正在java中使用Mockito编写Junit测试。但是有一个微服务是用Kotlin编写的。我尝试模拟kotlin服务,但它没有像我期望的那样工作。我计划在测试中返回一个自定义响应,我用调试器检查了它,而不是返回响应,它总是运行到kotlin函数(getFile)。
@Mock
private FileService fileservice; // this service written in Kotlin
@Before
public void setUp() {
Response respone = new Response(...);
when(fileservice.getFile(any())).thenReturn(response);
}
最好的方法是使用为Kotlin设计的mock库,这里有几个选项:
- 如果仍然需要坚持mockito, kotlin有官方的mockito支持,更多细节在这里:https://github.com/mockito/mockito-kotlin
- 还有一个专门为kotlin设计的mock库,它比mockito更适合:https://mockk.io/
许多java库使用字节码生成的代理,如mockito,虽然kotlin使每个类默认为final,但有一个名为all-open的kotlin插件,它可以使所有需要的类打开:https://kotlinlang.org/docs/all-open-plugin.html