我正在尝试模拟测试仪器中的 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)
}
关于android - Kotlin、Mockito 和 Android 测试仪器。 Lateinit 属性尚未初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47147167/