确定返回了两个可能的结果对象中的哪一个
Determine which of two possible result objects has been returned
我有一个 Result<SuccessData, ErrorType>
密封的 class,我用它来表示来自 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)
编辑:添加结果 Class
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()
}
}
如果你只是想断言响应是否成功。
// 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()
}
我有一个 Result<SuccessData, ErrorType>
密封的 class,我用它来表示来自 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)
编辑:添加结果 Class
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()
}
}
如果你只是想断言响应是否成功。
// 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()
}