为什么在 flatmap 中模拟 Mono.empty() 的响应会以错误结束?

Bra*_*don 1 java spring-boot reactive

我们有一个 methodA 它返回:

return bObj.methodB()
    .flatMap(x -> cObj.methodC(x));
Run Code Online (Sandbox Code Playgroud)

methodB 返回Mono<String>,methodC 返回Mono<Void>

使用 Mockito 时,我们可以模拟 methodB,但不能模拟 methodC。

when(bObj.methodB()).thenReturn(Mono.just("x"));
when(cObj.methodC(eq("x"))).thenReturn(Mono.empty());

aObj.methodA();
Run Code Online (Sandbox Code Playgroud)

当它运行时,我们得到以下异常:

java.lang.NullPointerException: The mapper returned a null Publisher
Run Code Online (Sandbox Code Playgroud)

当运行应用程序时,这可以正常工作,但当使用 Mockito 运行时,却不能。我认为这与 flatMap 有关,但无法弄清楚。参考这个问题似乎应该有效,但事实并非如此。有任何想法吗?

Bra*_*don 5

事实证明,如果有人遇到这样的问题,请确保Mockito.when定义正确。如果不匹配,则返回 null。因此例外。

顺便说一句,我在问题中遗漏了一些信息,以使其不那么复杂,但事实证明我描述的示例效果很好。重新处理它显示我的实际代码与when 子句不匹配。