使用Mockito,如何使用val接口字段声明监视Kotlin类?

时间:2017-09-30 08:16:31

标签: android mockito kotlin

我试图在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声明的相应字段),那么我们如何应用默认值或声明空构造函数呢?

谢谢!

1 个答案:

答案 0 :(得分:3)

  

当使用Mockito监视类时,类需要具有无参数构造函数

不,仅当您自己没有提供实例时才会这样做。所以提供实例,例如

@Spy val client = SomeApiClient(Mockito.mock(SomeApiService::class.java))