Kotlin,Mockito和Android测试仪器。 Lateinit属性尚未初始化

我试图嘲笑一个测试仪器的UseCase依赖。

我正在创建一个@Rule来处理这个问题:

LocationsUseCaseRule.kt

 class LocationsUseCaseRule : ExternalResource() { @Mock lateinit var locationsUseCase : LocationsUseCase @Throws(Throwable::class) override fun before() { super.before() LocationsUseCase.setInstance(locationsUseCase) } } 

但是当我before()点击时,不会加载用例。

我有单元测试相同的实现,它的工作原理。

这些是我的依赖:

 // Mockito def mockitoVersion = "2.6.3" testCompile 'org.mockito:mockito-core:' + mockitoVersion androidTestCompile 'org.mockito:mockito-core:' + mockitoVersion androidTestCompile "org.mockito:mockito-android:" + mockitoVersion testCompile "com.nhaarman:mockito-kotlin-kt1.1:1.5.0" 

这是我如何在LocationsUseCase设置我的实例:

 object Singleton { var instance: LocationsUseCase? = null } companion object { fun setInstance(locationsUseCase: LocationsUseCase?) { Singleton.instance = locationsUseCase } fun getInstance(): LocationsUseCase { if (Singleton.instance == null) { Singleton.instance = LocationsUseCase( LocationsRepository.instance ) } return Singleton.instance!! } } 

我认为这种方式更简单,并实现你想要的:

 object Singleton { val instance = LocationsUseCase(LocationsRepository.instance) }