Reactor 的 StepVerifier:断言在各个步骤上以不确定的方式失败

Reactor's StepVerifier: assertion fails in nondeterministic way on various step

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

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

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

userItemsRepository.save returns Mono

我准备了一个测试方法:

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 流程的第一种方法。任何人都有想法,如何处理这种情况?

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

1--2--3--4

flatMap

UserItem2--UserItem4--UserItem1--UserItem3

如果交错不打扰你,但又想保持原来的顺序,你可以使用flatMapSequencial or if you don't want any interleave concatMap