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
我想在 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