我试图在Android中使用Mockito在Kotlin中测试改造的api客户端类,看起来像这样:
class SomeApiClient : SomeApi {
private val service: SomeApiService
constructor(service: SomeApiService) {
this.service = service
}
}
它实现了SomeApi
接口,并包含一个改进服务接口作为构造函数参数。
当使用Mockito spy
类时,这些类需要使用无参数构造函数,否则您的测试将失败并显示MockitoException
:
org.mockito.exceptions.base.MockitoException:无法初始化@Spy带注释的字段' SomeClass'。 请确保类型' SomeClass'有一个无参数的构造函数。
如果类具有包含所有参数包含默认值的构造函数,则Kotlin为其生成无参数构造函数。但是,如果类接收interface
作为构造函数参数(并且具有val
声明的相应字段),那么我们如何应用默认值或声明空构造函数呢?
谢谢!
答案 0 :(得分:3)
当使用Mockito监视类时,类需要具有无参数构造函数
不,仅当您自己没有提供实例时才会这样做。所以提供实例,例如
@Spy val client = SomeApiClient(Mockito.mock(SomeApiService::class.java))