Kotlin 确定返回了两个可能的结果对象中的哪一个
我有一个Kotlin 确定返回了两个可能的结果对象中的哪一个,kotlin,integration-testing,android-livedata,Kotlin,Integration Testing,Android Livedata,我有一个Resultsealed类,用于表示来自api的响应。在片段中,我使用它来解析响应: activity?.onResult(response?.result, onSuccess = { // Act on successful response }, onValidationError = { // Act on errored response }) 现在,在我的测试中,我想测试响应并运行断言,判断它是成功响应还是错误响应(以及响应的类型) 如果我返回了一个变量,比
Result
sealed类,用于表示来自api的响应。在片段中,我使用它来解析响应:
activity?.onResult(response?.result, onSuccess = {
// Act on successful response
}, onValidationError = {
// Act on errored response
})
现在,在我的测试中,我想测试响应并运行断言,判断它是成功响应还是错误响应(以及响应的类型)
如果我返回了一个变量,比如response:Result=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()
}
}
密封类结果{
伴星{
乐趣成功(值:T):Ok=Ok(值)
有趣的错误(错误:列表):错误=错误(错误)
}
//成功响应数据
数据类Ok内部构造函数(val数据:T):结果()
//预期的验证错误
数据类错误内部构造函数(val errors:List):结果()
密封类泛型错误{
类未知:GenericError()
类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()
}
如果您只想断言响应是否成功
// 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()
}
如何测试它,告诉你预期会发生什么以及会发生什么,如果你需要澄清,当然还要发布你的代码?@JBNizet我已经尝试过了
response.result.value
不是实际的东西,只有response.result
是合法的。例如,response
是一个自定义响应对象,result
变量是result
。我需要评估is result is SuccessData,或ErrorType,但不确定如何执行(如果可能)。阅读result类的文档或源代码,或两者。你还没有发布,我们怎么知道?@JBNizet-behmm,在评论和粗鲁之前,你可以清楚地阅读我的问题。。。我告诉过你Result类是用typeResult
声明的。这意味着返回值可以是SuccessData
或ErrorType
。但是如何打开结果
来评估它是成功数据
还是错误类型
?。我为你编辑了我的问题,以包含结果
课程。我到底在哪里粗鲁过?您意识到自己拥有源代码,但自己无法判断使用response.result.value
是否是访问结果的正确方法。但是你要求我们告诉你怎么做,但是没有提供源代码,尽管你被要求做两次。我已经尽了最大努力不粗鲁,但事实上,你并没有让它变得容易。测试一下,告诉你会发生什么以及会发生什么,当然,如果你需要澄清的话,发布你的代码怎么样?@JBNizet我已经试过了response.result.value
不是实际的东西,只有response.result
是合法的。例如,response
是一个自定义响应对象,result
变量是result
。我需要评估is result is SuccessData,或ErrorType,但不确定如何执行(如果可能)。阅读result类的文档或源代码,或两者。你还没有发布,我们怎么知道?@JBNizet-behmm,在评论和粗鲁之前,你可以清楚地阅读我的问题。。。我告诉过你Result类是用typeResult
声明的。这意味着返回值可以是SuccessData
或ErrorType
。但是如何打开结果
来评估它是成功数据
还是错误类型
?。我为你编辑了我的问题,以包含结果
课程。我到底在哪里粗鲁过?您意识到自己拥有源代码,但自己无法判断使用response.result.value
是否是访问结果的正确方法。但是你要求我们告诉你怎么做,但是没有提供源代码,尽管你被要求做两次。我尽了最大的努力不粗鲁,但真的,你没有让事情变得容易。