我在 Kotlin 中有以下密封类
sealed class Result<T, E> {
class Success<T, E>(val result: T) : Result<T, E>()
class Failure<T, E>(val failure: E) : Result<T, E>()
}
并且正在从 create()
函数返回一个 Result 实体
并将以下内容与 RxJava2 一起使用,
return Single.fromCallable { repository.create(details) }
.map {
return@map when(result) {
is Result.Success -> CreatedState.Success(result.result)
is Result.Failure -> CreatedState.Error(result.failure)
}
}
据我所知,该功能似乎按预期工作。但是,当我对此进行单元测试时,
val testSubscriber = underTest.create(newDetails).test()
我得到一个 java.lang.IllegalStateException
并在异常列表中看到一个 kotlin.NoWhenBranchMatchedException
(在执行 assertComplete()
时) ),当我的检查详尽无遗时,我无法理解它会如何发生。还是我错过了什么?
TIA!
最佳答案
我知道这很旧,但可能会对某人有所帮助。 我最近遇到了类似的问题,并意识到在测试中,我没有设置我的模拟框架来为被调用的端点提供有效的答案。因此,它返回了 null,而 when block 没有处理它,从而产生了这个错误。
关于android - NoWhenBranchMatchedException 在 Kotlin 中具有详尽的 `when` block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52246024/