需要帮助为返回 Flux 流作为输出的函数编写 junit 测试
Need help on writing a junit test for a function which is returning Flux stream as output
我需要帮助为返回 Flux 流作为输出的函数编写单元测试。
我试过使用 StepVerifier,但我想我用错了。
需要测试以下功能。
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);
}
我试过的是
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();
}
我遇到错误:
java.lang.AssertionError:预期 "expectComplete" 失败(预期:onComplete();实际:onNext([Scan1:Success]))
服务方法不知何故被调用了两次(我使用 doAnswer 检查过)
Stream.generate(Supplier)
生成无限 Stream
,所以 completeScans
也是无限的。
由于 interval
也是无限的,使用模拟服务将两个结果压缩为 Flux
每 5 秒发出 ["Scan1:Success"]
。
相反,您的 StepVerifier
期望在终止之前有一个非常有限的 Flux
单个列表,因此一旦它看到列表的第二次出现就会失败。
我需要帮助为返回 Flux 流作为输出的函数编写单元测试。
我试过使用 StepVerifier,但我想我用错了。
需要测试以下功能。
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);
}
我试过的是
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();
}
我遇到错误:
java.lang.AssertionError:预期 "expectComplete" 失败(预期:onComplete();实际:onNext([Scan1:Success]))
服务方法不知何故被调用了两次(我使用 doAnswer 检查过)
Stream.generate(Supplier)
生成无限 Stream
,所以 completeScans
也是无限的。
由于 interval
也是无限的,使用模拟服务将两个结果压缩为 Flux
每 5 秒发出 ["Scan1:Success"]
。
相反,您的 StepVerifier
期望在终止之前有一个非常有限的 Flux
单个列表,因此一旦它看到列表的第二次出现就会失败。