Java 需要帮助为返回通量流作为输出的函数编写junit测试吗
我需要帮助为返回通量流作为输出的函数编写单元测试 我试过使用StepVerifier,但我想我用错了 需要测试以下功能Java 需要帮助为返回通量流作为输出的函数编写junit测试吗,java,spring-boot,spring-webflux,project-reactor,Java,Spring Boot,Spring Webflux,Project Reactor,我需要帮助为返回通量流作为输出的函数编写单元测试 我试过使用StepVerifier,但我想我用错了 需要测试以下功能 public Flux<List<String>> streamCompletedScansAfterLastSubmit(@PathVariable("username") String username) { Flux<Long> interval = Flux.interval(Duration.ofSeconds(5));
public Flux<List<String>> streamCompletedScansAfterLastSubmit(@PathVariable("username") String username) {
Flux<Long> interval = Flux.interval(Duration.ofSeconds(5));
Flux<List<String>> completeScans = Flux.fromStream(Stream.generate(() -> scanService.getCompletedScansAfterLastSubmitForUser(username)));
return Flux.zip(interval, completeScans).map(Tuple2::getT2);
}
我得到一个错误:
java.lang.AssertionError:预期“expectComplete”失败(预期:onComplete();实际:onNext([Scan1:Success]))
不知怎的,服务方法被调用了两次(我检查了使用doAnswer)流。generate(Supplier)
生成无限的流,因此completeScan
也是无限的
由于interval
也是无限的,使用mock服务,这两种服务的压缩会产生流量
,每5秒发出[“Scan1:Success”]
相反,您的StepVerifier
期望在终止前对单个列表进行非常有限的流量
,因此它在看到列表的第二次出现时立即失败 Stream.generate(Supplier)
生成无限的流,因此completeScans
也是无限的
由于interval
也是无限的,使用mock服务,这两种服务的压缩会产生流量
,每5秒发出[“Scan1:Success”]
相反,您的StepVerifier
期望在终止前对单个列表进行非常有限的流量
,因此它在看到列表的第二次出现时立即失败 是的,目前已经修复了这个问题,需要从流中获取有限数量的元素并断言它们StepVerifier.create(apiScanController.streamCompletedScansAfterLastSubmit(“abc”).take(2)).expectNext(Arrays.asList(“Scan1:Success”)).expectNext(Arrays.asList(“Scan2:Error”)).verifyComplete()```是的,这是一个好办法。您还可以在确信收到了一致的值后取消源代码,方法是使用然后取消()。verify()
而不是verifyComplete()
是,当前已修复了它,希望从流中获得有限数量的元素并断言它们StepVerifier.create(apiScanController.streamCompletedScansAfterLastSubmit(“abc”).take(2)).expectNext(Arrays.asList(“Scan1:Success”)).expectNext(Arrays.asList(“Scan2:Error”)).verifyComplete()```是的,这是一个好办法。您还可以在确信收到一致的值后,通过使用然后取消().verify()
而不是verifyComplete()
public void shouldPublishTheAssessmentStatusOnceFinished() {
when(scanService.getCompletedScansAfterLastSubmitForUser(Mockito.anyString())).thenReturn(Arrays.asList("Scan1:Success"));
StepVerifier.create(apiScanController.streamCompletedScansAfterLastSubmit("quays_ka"))
.expectSubscription()
.expectNext(Arrays.asList("Scan1:Success"))
.verifyComplete();
}