【问题标题】:Kotlin, Mockito and Android Test Instrumentation. Lateinit Property has not been initializedKotlin、Mockito 和 Android 测试工具。 Lateinit 属性尚未初始化
【发布时间】:2017-11-06 22:51:20
【问题描述】:

我正在尝试在测试工具中模拟 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!!
    }


}

【问题讨论】:

  • LocationsUseCase.setInstance的代码是什么?
  • 我刚刚修改了问题。谢谢
  • 您将未初始化的locationsUseCase 传递给LocationsUseCase.setInstance,因此出现错误。你不是说LocationsUseCase.setInstance(LocationsUseCase.getInstance())吗?
  • 另外,当你可以简单地做object Singleton { val instance = LocationsUseCase( LocationsRepository.instance) }时,你为什么要做所有这些?
  • Mmmmm 似乎是这样工作的,但我在单元测试中有相同的代码(或基本相似),而且它工作正常。

标签: android kotlin mockito


【解决方案1】:

我认为这种方式更简单,可以达到你想要的效果:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-11-22
    • 1970-01-01
    • 2020-04-14
    • 2021-10-13
    • 2022-07-05
    • 1970-01-01
    • 2017-03-03
    • 1970-01-01
    相关资源
    最近更新 更多