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) }