android - NoWhenBranchMatchedException 在 Kotlin 中具有详尽的 `when` block

标签 android kotlin rx-java2

我在 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/

相关文章:

java - 重新编译jodatime?

java - 不幸的是(我的应用程序)已停止工作

具有固定 UID 的 Android NFC 卡模拟

c# - Kotlin 的数据类 == C# 的结构?

android - 更新到 RxJava 2.x.x 后 Observable.combineLatest 导致错误。 - 无法推断类型

android - Activity 与 View 。与 SurfaceView 和交互

kotlin - Kotlin不能在init上使用 'this'

kotlin - 为什么 Kotlin 在运算符重载之外使用运算符修饰符?

observable - RxJava 2 : Stats about messages dropped because of BackPressure?

android - RxJava运行在主线程而不是后台线程