Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kotlin 确定返回了两个可能的结果对象中的哪一个_Kotlin_Integration Testing_Android Livedata - Fatal编程技术网

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类是用type
Result
声明的。这意味着返回值可以是
SuccessData
ErrorType
。但是如何打开
结果
来评估它是
成功数据
还是
错误类型
?。我为你编辑了我的问题,以包含
结果
课程。我到底在哪里粗鲁过?您意识到自己拥有源代码,但自己无法判断使用
response.result.value
是否是访问结果的正确方法。但是你要求我们告诉你怎么做,但是没有提供源代码,尽管你被要求做两次。我已经尽了最大努力不粗鲁,但事实上,你并没有让它变得容易。测试一下,告诉你会发生什么以及会发生什么,当然,如果你需要澄清的话,发布你的代码怎么样?@JBNizet我已经试过了
response.result.value
不是实际的东西,只有
response.result
是合法的。例如,
response
是一个自定义响应对象,
result
变量是
result
。我需要评估is result is SuccessData,或ErrorType,但不确定如何执行(如果可能)。阅读result类的文档或源代码,或两者。你还没有发布,我们怎么知道?@JBNizet-behmm,在评论和粗鲁之前,你可以清楚地阅读我的问题。。。我告诉过你Result类是用type
Result
声明的。这意味着返回值可以是
SuccessData
ErrorType
。但是如何打开
结果
来评估它是
成功数据
还是
错误类型
?。我为你编辑了我的问题,以包含
结果
课程。我到底在哪里粗鲁过?您意识到自己拥有源代码,但自己无法判断使用
response.result.value
是否是访问结果的正确方法。但是你要求我们告诉你怎么做,但是没有提供源代码,尽管你被要求做两次。我尽了最大的努力不粗鲁,但真的,你没有让事情变得容易。