我正在使用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之后?
给定您想要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而不是值,所以我怀疑您可能是需要谓词而不是固定值。