Определите, какой из двух возможных объектов результата был возвращен - PullRequest
0 голосов
/ 05 декабря 2018

У меня есть 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 голосов
/ 05 декабря 2018

Если вы просто хотите подтвердить, является ли ответ успешным или нет.

// 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()
}
...