【问题标题】:Testing flux with StepVerifier使用 StepVerifier 测试助焊剂
【发布时间】:2018-01-28 09:57:42
【问题描述】:

我正在从该页面学习Reactive Programmingtutorial。我想知道为什么在下面的示例中,当我期望 4 条记录时,stact 跟踪会抛出实际一条记录的错误?

java.lang.AssertionError: expectation "expectNextCount(4)" failed (expected: count = 4; actual: counted = 1; signal: onComplete())

// TODO Create a StepVerifier that initially requests all values and expect 4 values to be received
StepVerifier requestAllExpectFour(Flux<User> flux) {
        return StepVerifier.withVirtualTime(() -> Flux.just(flux))
                .expectSubscription()
                .thenRequest(4)
                .expectNextCount(4)
                .expectComplete();
}

我想知道我是否在这里遗漏了什么。

【问题讨论】:

    标签: java project-reactor


    【解决方案1】:

    试试这个

    StepVerifier requestAllExpectFour(Flux<User> flux) {
        return StepVerifier.withVirtualTime(() -> flux)
                .expectSubscription() 
                .thenRequest(Long.MAX_VALUE) 
                .expectNextCount(4) 
                .expectComplete(); 
    } 
    

    或者像这样

    StepVerifier requestAllExpectFour(Flux<User> flux) {
        return StepVerifier.create(flux)
                .expectSubscription() 
                .thenRequest(Long.MAX_VALUE) 
                .expectNextCount(4) 
                .expectComplete(); 
    } 
    

    【讨论】:

      【解决方案2】:

      我认为问题在于您通过使用 Flux.just 来提供具有单次通量发射的通量。您可以只应用助焊剂本身:

      .withVirtualTime(() -> flux)
      

      【讨论】:

      • 感谢您解释这个问题 - 而不是像其他答案那样只发布“解决方案”。
      【解决方案3】:

      源代码 -> https://github.com/reactor/lite-rx-api-hands-on

      问题 -> https://github.com/reactor/reactor-addons/issues/61

      指南 -> https://projectreactor.io/docs/core/release/reference/#_manipulating_time

      下面的代码可以工作...

      StepVerifier requestAllExpectFour(Flux<User> flux) {
          List<User> users = new ArrayList<>(Arrays.asList(User.SKYLER, User.JESSE, User.WALTER, User.SAUL));
          return StepVerifier.withVirtualTime(() -> 
                      Flux.interval(Duration.ofMillis(100))
                         .zipWith(Flux.fromIterable(users), (i, user) -> user))
                  .expectSubscription()  
                  .thenRequest(4) 
                  .thenAwait(Duration.ofMillis(400))
                  .expectNextCount(4)  
              .expectComplete();  
      }
      

      【讨论】:

        【解决方案4】:

        我猜这个练习想要的是你用构造函数用请求初始化 StepVerifier,像这样:

        StepVerifier requestAllExpectFour(Flux<User> flux) {
            return StepVerifier.create(flux, 4)
                  .expectNextCount(4)
                  .expectComplete();
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-01-25
          • 2020-02-29
          • 2015-02-06
          • 2015-03-22
          • 1970-01-01
          • 1970-01-01
          • 2016-03-12
          • 2015-02-11
          相关资源
          最近更新 更多