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"));
可能provider.getAuthor()
returns没有值(一个Mono.empty()
)当你运行你的测试?
A flatMap
需要一个值来操作。如果没有价值,它不会被调用。您可以添加一个 doOnComplete()
调用并查看它是否在序列完成时被触发。
Web 应用程序和测试 运行 是相同的数据吗?
"在您订阅之前什么都不会发生"
您可以添加一个 doOnSubscribe()
调用并查看它是否被触发以及何时被触发 运行测试。
我正在尝试使用集成测试来测试以下代码:
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"));
可能
provider.getAuthor()
returns没有值(一个Mono.empty()
)当你运行你的测试?A
flatMap
需要一个值来操作。如果没有价值,它不会被调用。您可以添加一个doOnComplete()
调用并查看它是否在序列完成时被触发。Web 应用程序和测试 运行 是相同的数据吗?
"在您订阅之前什么都不会发生"
您可以添加一个
doOnSubscribe()
调用并查看它是否被触发以及何时被触发 运行测试。