jam*_*246 4 kotlin project-reactor
我正在尝试测试捕获kotlin.Exception由 a 抛出的异常 ( ) Mono,然后捕获该异常,并抛出一个新异常 ( MyException)。
以下代码段失败...
class MyException : Exception("My Exception")
assertThrows<MyException> {
     Mono.fromCallable { throw Exception() }
         .onErrorMap { MyException() }
         .subscribe()
}
...出现以下错误:
org.opentest4j.AssertionFailedError: Unexpected exception type thrown ==> 
Expected :<com.company.project.service.SomeServiceTest$foobar$MyException> 
Actual   :<reactor.core.Exceptions.ErrorCallbackNotImplemented>
但是,以下通过
assertThrows<RuntimeException> {
    Mono.fromCallable { throw Exception() }
        .onErrorMap { RuntimeException() }
        .subscribe()
}
我不确定为什么。除了我使用自定义异常之外,我看不出有什么区别。
我也尝试使用block(),结果类似:
class MyException : Exception("My Exception")
assertThrows<MyException> {
    Mono.fromCallable { throw Exception() }
            .onErrorMap { MyException() }
            .block()
}
不同的例外:
org.opentest4j.AssertionFailedError: Unexpected exception type thrown ==> 
Expected :<com.company.project.service.SomeServiceTest$foobar$MyException> 
Actual   :<reactor.core.Exceptions.ReactiveException>
小智 5
如果你想测试一个发布者(Mono/Flux),你应该使用StepVerifier。不要忘记,当您使用 subscribe 方法时,它不会阻塞线程。这可能导致您的测试有时可以通过,有时不能,因为测试(主)线程可以在您的测试流(单声道)完成之前终止。
class MyException : Exception("My Exception")
@Test
fun `correct exception mapping`() {
    val theMonoWeWantToTest = Mono
        .fromCallable { throw Exception() }
        .onErrorMap { MyException() }
    theMonoWeWantToTest
        .test() // Kotlin's extension function for Reactor's StepVerifier
        .expectError(MyException::class.java)
        .verify()
}
| 归档时间: | 
 | 
| 查看次数: | 2968 次 | 
| 最近记录: |