【问题标题】:Reactor's StepVerifier: assertion fails in nondeterministic way on various stepReactor 的 StepVerifier:断言在各个步骤中以不确定的方式失败
【发布时间】:2020-11-20 09:43:35
【问题描述】:

我想在 Mongo 存储库中的集成测试保存操作中使用 StepVerifier。

我准备了一个插入多个 UserItems 的方法以供进一步验证:

Flux<UserItems> saveMultiple(int numberOfItems) {
    return Flux.range(0, numberOfItems)
            .flatMap { userItemsRepository.save(new UserItem(it)) }
}

userItemsRepository.save 返回单声道

我准备了一个测试方法:

def "Should save all UserItems"() {
    given:
    def numberOfItems = 3

    when:
    def saveResult = saveMultiple(numberOfItems)

    then:
    StepVerifier.create(saveResult)
            .expectNextMatches {it.itemNo == 0 }
            .expectNextMatches {it.itemNo == 1 }
            .expectNextMatches {it.itemNo == 2 }
            .expectComplete()
            .verify()
}

而且我预计下一个项目将以 {0,1,2} 的顺序出现。不幸的是,由于java.lang.AssertionError,测试在各个步骤中以非确定性方式失败。我无法弄清楚如何正确地做到这一点。这是我测试 Reactor 流的第一种方法。任何人都有想法,如何处理这种情况?

【问题讨论】:

    标签: java testing integration-testing project-reactor


    【解决方案1】:

    flatMap 运算符不保留源的顺序,而是让来自不同内部的值交错。 所以根据 userItemsRepository.save 你可以有类似的东西:

    1--2--3--4
    
    flatMap
    
    UserItem2--UserItem4--UserItem1--UserItem3
    

    如果交错不打扰您但想保持原始顺序,您可以使用flatMapSequencial 或者如果您不想要任何交错concatMap

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-08-16
      • 1970-01-01
      • 1970-01-01
      • 2016-11-03
      • 1970-01-01
      • 2023-03-07
      • 2020-09-19
      相关资源
      最近更新 更多