我有以下代码片段,用于使用 com.mongodb.reactivestreams.client.MongoClient
和 Flowable
代码片段如下:
Flowable
.fromPublisher(
mongoClient
.getDatabase(mydb)
.getCollection(mycollection)
.find()
.limit()
)
.firstOrError()
.toMaybe()
.doOnError(error -> { /* somecode */ })
我试着嘲笑这个流利表达的每一步,例如
MongoDatabase someDb = Mock(MongoDatabase)
mongoClient.getDatabase(mydb) >> somedb
但是在以某种方式执行此操作时,测试会继续运行。
使用 Spock 对其进行单元测试的正确方法是什么?
答案 0 :(得分:0)
Fluent 接口是模拟的 PITA,我的策略是将这些调用放入单独的类/方法中并模拟它。然后在集成测试中测试流畅的部分。
答案 1 :(得分:0)
除了 Leonard 的想法外,您可能还想考虑实现一个特殊的 ThisResponse implements IDefaultResponse
,它始终为每个模拟方法调用返回模拟实例,并为您的流畅 API 类使用 Mock(defaultResponse: ThisResponse.INSTANCE)
( es)。只要测试中使用的 fluent API 方法应该返回 this
或至少另一个给定类型的对象,这就会很好地工作。只有在返回另一种类型的地方,您才需要存根。
查看 this answer 了解更多详情。只要您用一点 MCVE 更新您的问题,如果您在使用该解决方案时遇到任何问题,也可以提出后续问题。