【问题标题】:MockK verifySequence not working because of object reference由于对象引用,MockK verifySequence 无法正常工作
【发布时间】:2021-03-19 15:01:15
【问题描述】:

我经常使用状态类(密封类)来控制我的屏幕状态(比如成功、错误和加载)。所以我会有类似的东西:

sealed class State {
    object Loading: State()
    object Success : State()
    object Error : State()
}

现在,在某个类上,我有一个具有此值的属性,在某个流程中,我将其设置为 Loading,然后设置为 Error。我可以检查这是否是使用verifySequence 设置此属性的顺序,如下所示:

verifySequence {
    stateObserver.onChanged(State.Loading)
    stateObserver.onChanged(State.Success)
}

现在假设我的密封类内部有类而不是对象,并且有点复杂,如下所示:

sealed class NetworkResult<T> {
    class Success<T>(val data: T) : NetworkResult<T>()
    class Error<T>(val message: String) : NetworkResult<T>()
    class Loading<T> : NetworkResult<T>()
}

当我尝试检查顺序时,我的测试失败了,因为我正在使用类并且 MockK 通过引用做出断言:

verifySequence {
    stateObserver.onChanged(State.Loading())
    stateObserver.onChanged(State.Success(list))
}

知道如何检查这个序列吗?

【问题讨论】:

    标签: android unit-testing testing mockk sealed-class


    【解决方案1】:

    尝试使用数据类而不是简单的类:

    sealed class NetworkResult<T> {
        data class Success<T>(val data: T?) : NetworkResult<T>()
        data class Error<T>(val message: String?) : NetworkResult<T>()
        data class Loading<T>(val nothing: Nothing? = null) : NetworkResult<T>()
    }
    

    【讨论】:

      猜你喜欢
      • 2019-08-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多