gpt4 book ai didi

java - 需要帮助为返回 Flux 流作为输出的函数编写 junit 测试

转载 作者:太空宇宙 更新时间:2023-11-04 09:32:05 25 4
gpt4 key购买 nike

我需要帮助为返回 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 非常有限,因此一旦看到该列表第二次出现,它就会失败。

关于java - 需要帮助为返回 Flux 流作为输出的函数编写 junit 测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56970884/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com