Reactor测试StepVerifier如何校验所有onNext事件均匹配指定断言
要校验响应式流所有发射的onNext事件都满足指定断言,可以用以下两种主流方案实现:
方案1:使用thenConsumeWhile(推荐通用场景)
thenConsumeWhile会持续消费流中所有发射的onNext事件,要求每一个事件都匹配你传入的断言,只要有一个事件不匹配就会直接抛出断言失败,所有事件校验通过后才会进入后续步骤。
示例代码如下:
StepVerifier.create(...) // 所有onNext事件都需要满足该断言 .thenConsumeWhile { it.status != "SUCCESS" } .expectComplete() .verify()
方案2:收集全量元素后统一校验(适合需要额外校验整体规则的场景)
如果你需要同时校验元素数量、排序等整体规则,可以先把所有发射的元素收集到集合中,再做全量断言:
StepVerifier.create(...) // 指定集合存储所有发射的元素,替换泛型为你实际的元素类型 .recordWith { mutableListOf<YourItemType>() } .consumeRecordedWith { allItems -> // 遍历校验所有元素 allItems.forEach { assert(it.status != "SUCCESS") { "存在不符合规则的元素:${it},status为${it.status}" } } // 可额外添加其他整体校验逻辑,比如校验元素总数 // assert(allItems.size == 5) } .expectComplete() .verify()
原代码问题说明
expectNextMatches设计上仅校验流的下一个单个onNext事件,调用一次只会匹配第一个发射的元素,后续元素不会被校验,因此无法满足校验所有事件的需求。
内容的提问来源于stack exchange,提问作者pixel
相关产品推荐
相关产品推荐

