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

标签 android kotlin mockito

我正在尝试模拟测试仪器中的 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/

相关文章:

android - 发送静音短信

android - 列出ZXing中扫描的条码信息

java - 在 IntelliJ 中使用 mockito

java - Mockito:使用 List<String> 作为参数

java - 如何模拟 RestTemplate 的新实例?

android - 您可以通过移动连接通过市场下载的最大文件大小是多少?

javascript - Phonegap 的本地存储可靠性

gradle - IntelliJ 上的 Kotlin Multiplatform 每次都尝试下载 native 依赖项

java - 正则表达式选择数学公式中的最新表达式以更改符号

android - 通过 WiFi 连接检查互联网连接状态以发出通知