Joan Colmenero
11/19/2019, 3:35 PMgetOrElse
on my ResultWrapper
class?
sealed class ResultWrapper<out T> {
data class Success<out T : Any>(val value: T) : ResultWrapper<T>()
data class Failure<out T : Any>(val failure: Throwable) : ResultWrapper<T>()
inline fun <B> fold(ifFailure: (Throwable) -> B, ifSuccess: (T) -> B): B =
when (this) {
is Failure -> ifFailure(failure)
is Success -> ifSuccess(value)
}
companion object {
fun <T : Any> just(t: T): ResultWrapper<T> = Success(t)
fun <T : Any> raise(t: Throwable): ResultWrapper<Throwable> = Failure(t)
}
}
I'm getting a Success(value=MyModel(....))
And I need to do an Assert.assertEquals(expectedResult, result)
where expectedResult
is MyModel
and Result
is Success(value=MyModel(....))
.
Any idea?diesieben07
11/19/2019, 3:39 PMval valueOrDefault = result.fold({ defaultValue }, { it })
Or you can write a helper function:
inline fun <T> ResultWrapper<T>.getOrDefault(defaultValue: (err: Throwable) -> T): T {
return fold(defaultValue, {it})
}
Joan Colmenero
11/19/2019, 3:39 PMgetOrDefault
diesieben07
11/19/2019, 3:40 PMJoan Colmenero
11/19/2019, 3:41 PMdiesieben07
11/19/2019, 3:41 PMJoan Colmenero
11/19/2019, 3:42 PMresult.getOrDefault
I do not know whydiesieben07
11/19/2019, 3:43 PMwbertan
11/19/2019, 3:43 PMResult
from Kotlin?!Result
extensions?!streetsofboston
11/19/2019, 3:49 PMAssert.assertEquals(ResultWrapper.just(expectedResult), result)
?Joan Colmenero
11/19/2019, 3:51 PMgetOrNull
or getOrDefault
method to get the model inselfstreetsofboston
11/19/2019, 3:58 PMResultWrapper
, which you assert with the expected value that also should be a `ResultWrapper`…Joan Colmenero
11/19/2019, 3:59 PMgetOrDefault
solution, thank you thoughwbertan
11/19/2019, 4:13 PMassert
?! As I suspect is for your tests?!
@Test
fun asas() {
val expectedResult = "asas"
val result: ResultWrapper<String> = ResultWrapper.just("asas")
assertEquals(expectedResult, result)
}
private inline fun <reified T : Any> assertEquals(expectedResult: T, result: ResultWrapper<T>) {
when (result) {
is ResultWrapper.Success<*> -> org.junit.Assert.assertEquals(expectedResult, result.value)
is ResultWrapper.Failure<*> -> org.junit.Assert.assertEquals(expectedResult, result.failure)
}
}