确定已返回两个可能的结果对象中的哪一个

时间:2018-12-04 22:41:00

标签: kotlin integration-testing android-livedata

我有一个Result<SuccessData, ErrorType>密封类,用于表示来自api的响应。在片段中,我使用它来解析响应:

activity?.onResult(response?.result, onSuccess = {
    // Act on successful response
}, onValidationError = {
    // Act on errored response
})

现在,在我的测试中,我想测试响应并在断言是成功响应还是错误响应(以及响应的类型)上运行断言。

如果我返回了类似response: Result<SuccessData, ErrorType> = someResponse的变量,我是否可以做类似

的操作
// Test Successful Response
Assert.assertTrue(response.result.value is SuccessData)

// Test Failed Response
Assert.assertTrue(response.result.value is ErrorType)

编辑:添加结果类

sealed class Result<out Success, out ErrorType> {
    companion object {
        fun <T> success(value: T): Ok<T> = Ok(value)
        fun <E> error(errors: List<E>): Error<E> = Error(errors)
    }

    // success response data
    data class Ok<out T> internal constructor(val data: T) : Result<T, Nothing>()

    // expected validation errors
    data class Error<out E> internal constructor(val errors: List<E>) : Result<Nothing, E>()

    sealed class GenericError {
        class Unknown : GenericError()
        class ServerDown : GenericError()
    }
}

1 个答案:

答案 0 :(得分:2)

如果您只想断言响应是否成功。

// Test Successful Response
Assert.assertTrue(response.result is Result.Ok)

// Test Failed Response
Assert.assertTrue(response.result is Result.Error)

如果要对响应中的数据执行断言,则可以这样编写。

if (response.result is Result.Ok) {
    Assert.assertEquals(result.data, "some data")
} else {
    fail()
}