如何在本测试中优化stepVeriifer的使用?

问题描述 投票:1回答:1

我正在使用Reactor的Flux(projectreactor.io)创建反应性流。

[在我的流生成方法(connect())中,我将放出许多类型为X的消息,然后最后在操作结束时,我将发出一条类型为Y的消息,然后调用complete()的流量。

消息X的数量在测试时未知。可能会有所不同,具体取决于测试运行的持续时间。

此刻是我的测试条件:

var connectStream = service.connect();
StepVerifier.create(connectStream)
  .recordWith(ArrayList::new)
  .thenConsumeWhile(x -> true)
  .verifyComplete();  

它允许我测试流是否已被服务器端关闭。

我的问题更多是'怎么做'性质的:我如何确保有X个以上的消息,并且它们都跟在一条消息Y之后?

project-reactor
1个回答
0
投票

给定您想要X类型的“一个或多个”消息,然后正是Y类型的消息:

StepVerifier.create(new Main().getFlux())
        .expectNextMatches(x -> x.equals("X"))
        .thenConsumeWhile(x -> x.equals("X"))
        .expectNextMatches(x -> x.equals("Y"))
        .verifyComplete();

所以:

Flux.just("X", "X", "X", "Y"); //Passes
Flux.just("X", "X", "X", "Y", "Y"); //Fails
Flux.just("Y"); //Fails

在这个简单的示例中,您当然可以只使用expectNext()代替expectNextMatches()-我使用后者是因为您说您想测试types而不是值,所以我怀疑您可能是需要谓词而不是固定值。

© www.soinside.com 2019 - 2024. All rights reserved.