reactor的stepverifier:Assert在不同的步骤上以不确定的方式失败

pzfprimi  于 2021-07-06  发布在  Java
关注(0)|答案(1)|浏览(303)

我想在集成测试中使用stepverifier在mongo存储库中保存操作。
我准备了一个插入多个useritems的方法,以便进一步验证:

Flux<UserItems> saveMultiple(int numberOfItems) {
    return Flux.range(0, numberOfItems)
            .flatMap { userItemsRepository.save(new UserItem(it)) }
}
``` `userItemsRepository.save` 返回mono<useritem>
我准备了一个测试方法:

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` 以不确定的方式,在不同的步骤上。我想不出怎么做得好。这是我第一个测试React堆流量的方法。有人有主意,怎么处理这种情况吗?
vyswwuz2

vyswwuz21#

flatmap操作符不保留源的顺序,而是让来自不同内部的值交错。因此,根据useritemsrepository.save的不同,您可以得到如下结果:

1--2--3--4

flatMap

UserItem2--UserItem4--UserItem1--UserItem3

如果交错不困扰你,但想保持原来的秩序,你可以使用flatmapsequencial或如果你不想任何交错concatmap

相关问题