需要帮助为返回 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 单个列表,因此一旦它看到列表的第二次出现就会失败。