spring - Flux 为 StepVerifier 返回未排序的数据
问题描述
我希望在将三个元素写入数据库后收到两个元素。该查询返回一个 Flux,它返回未排序的元素。
@Test
fun `SUCESSFULLY query pending purchases`() {
// arrange
val arrived = TestDataFactory.buchungssatzEntity(
sequentialId = 1,
arrived = true
)
val pending = TestDataFactory.buchungssatzEntity(
sequentialId = 2,
arrived = false
)
val next_pending = TestDataFactory.buchungssatzEntity(
sequentialId = 3,
arrived = false
)
// act
buchhaltungWriter.save(arrived)
buchhaltungWriter.save(pending)
buchhaltungWriter.save(next_pending)
val purchases = inventoryFinder.findAllPendingPurchases()
// assert
StepVerifier.create(purchases)
.expectNext(pending)
.expectNext(next_pending)
.verifyComplete()
}
这总是抛出
预期值:BuchungssatzEntity(...sequentialId=2 ...); 实际值:BuchungssatzEntity(...sequentialId=3 ...)
我不想在数据库查询中添加排序,这是浪费时间。如何使用“所有这些元素但以任何顺序”测试 Flux,或者在这种情况下我应该只选择 Mono,返回一个列表并自己完成其余的工作?再说一次,这不是我使用反应式的原因。
PS:这个测试的目标是验证我的 Spring 查询语言语句过滤是否正确。
- - - - 更新
我通过使用解决了它
StepVerifier.create(inventoryFinder.findAllPendingPurchases())
.recordWith { listOf<PurchasesModel>() }
.thenConsumeWhile { i: Any? -> purchases.contains(i) }
.consumeRecordedWith{ }
.verifyComplete()
解决方案
一种方法是将thenConsumeWhile
运算符与expectNextCount
. 如果序列中有任何元素不匹配,StepVerifier 将出错。
在 Java 中:
List<Item> pendingItems = List.of(pending, next_pending);
Flux<Item> items = inventoryFinder.findAllPendingPurchases();
StepVerifier.create(items)
.expectNextCount(2) //expecting 2 elements
.verifyComplete();
StepVerifier.create(items)
.thenConsumeWhile((i) -> pendingItems.contains(i)) // check if element was expected
.verifyComplete();
推荐阅读
- python - 请求返回损坏的管道,但邮递员返回 500 状态
- algorithm - 如何衡量客户的评价?
- c# - 如何添加评论
通过具有 namespaceDoc 类文件的 C# 命名空间(不使用 SHFB) - android - 如何在 xml 中更改回收站视图的方向?
- python - 尝试使用列表中的正则表达式仅提取姓氏
- swift - Swift prefix() 没有在对象上调用
- tensorflow2.0 - TypeError:reduce_sum() 在 TF 2.0 中得到了一个意外的关键字参数“keep_dims”
- listview - Flutter ListView.Builder 导致滚动不连贯。如何使滚动平滑?
- node.js - ejabberd - 在调用 oauth_issue_token API 时抛出 case_clause 问题
- mysql - mySQL 从另一个数据库复制缺失的列