Mono.then() 在测试时不执行

Mono.then() not executing when in tests

我正在尝试使用集成测试来测试以下代码:

return ((Mono<Object>) joinPoint.proceed()).then(provider.getAuthor().flatMap((author) -> {
            Arrays.stream(joinPoint.getArgs())
                    .forEach(arg -> javers.commitShallowDeleteById(author, InstanceIdDTO.instanceId(arg.toString(), deletedEntity)));
            return Mono.empty();
        }));

jointPoint.proceeed() 总是 returns 一个 Mono<Void> 所以这就是我使用 then().

的原因

当 运行 在调试模式下设置应用程序时,如果我在平面图中放置一个断点,我可以看到它通过那里,但是如果我 运行 它在 @SpringBootTest 中不再通过平面图内部。

测试配置:

@DirtiesContext
@ActiveProfiles("test")
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)

供应商: when(authorProvider.getAuthor()).thenReturn(Mono.just("Author"));

  1. 可能provider.getAuthor()returns没有值(一个Mono.empty())当你运行你的测试?

    A flatMap 需要一个值来操作。如果没有价值,它不会被调用。您可以添加一个 doOnComplete() 调用并查看它是否在序列完成时被触发。

    Web 应用程序和测试 运行 是相同的数据吗?

  2. "在您订阅之前什么都不会发生"

    您可以添加一个 doOnSubscribe() 调用并查看它是否被触发以及何时被触发 运行测试。