0

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

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()总是返回 aMono<Void>所以这就是我使用then().

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

测试配置:

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

提供者: when(authorProvider.getAuthor()).thenReturn(Mono.just("Author"));

4

1 回答 1

0
  1. 运行测试时可能provider.getAuthor()不返回值(a )?Mono.empty()

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

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

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

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

于 2020-07-27T10:34:19.210 回答