Kotlin 中带有详尽 `when` 块的 NoWhenBranchMatchedException

Boo*_*per 3 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>()
}
Run Code Online (Sandbox Code Playgroud)

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)
                }
            }
Run Code Online (Sandbox Code Playgroud)

据我所知,该功能似乎按预期工作。然而当我对此进行单元测试时,

    val testSubscriber = underTest.create(newDetails).test()
Run Code Online (Sandbox Code Playgroud)

我得到一个并在异常列表中java.lang.IllegalStateException看到一个(当执行一个时),我无法理解它是如何发生的,因为我的何时检查是详尽的。或者我在那里错过了什么?kotlin.NoWhenBranchMatchedExceptionassertComplete()

蒂亚!

anj*_*osc 16

我知道这很旧,但可能会对某人有所帮助。我最近遇到了类似的问题,并意识到在测试中,我没有设置我的模拟框架来为被调用的端点提供有效的答案。因此,它返回 null,这不是由 when 块处理的,这会产生此错误。