【发布时间】:2017-06-20 15:42:49
【问题描述】:
我正在使用 Spring Reactor Core 3.0.6,并且我有一个返回 Flux 的方法:
public Flux<Foo> createFlux(){
return Flux.<List<Foo>,String>generate(/* generator omitted for clarity's sake */ )
.take(Duration.ofSeconds(10)
.flatMap(Flux::fromIterable);
}
生成器函数调用分页的 REST api 来获取结果,如果 API 继续返回数据,我希望 Flux 只运行 10 秒。
它工作正常,但我想创建一些单元测试,但我无法创建一个测试来验证 Flux 最多只能运行 10 秒。
我模拟了其余的服务,让它总是返回数据并写了这个:
StepVerifier.withVirtualTime(() -> createFlux())
.thenAwait(Duration.ofSeconds(10))
.verifyComplete();
但它失败了:
java.lang.AssertionError: expectation "expectComplete" failed (expected: onComplete(); actual: onNext([my toString() Foo bean]))
我想我应该以某种方式使用生成的项目,但我找不到正确的 StepVerifier 方法来执行此操作。
编辑
我尝试使用thenConsumeWhile 跳过每个项目:
StepVerifier.withVirtualTime(() -> createFlux())
.thenAwait(Duration.ofSeconds(10))
.thenConsumeWhile(t -> true)
.verifyComplete();
但现在测试只是无限期地运行并且永远不会结束。
【问题讨论】:
标签: java spring unit-testing project-reactor