如何解决使用 spock 对 RxJava Flowable 进行单元测试
我有以下代码片段,用于使用 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 对其进行单元测试的正确方法是什么?
解决方法
Fluent 接口是模拟的 PITA,我的策略是将这些调用放入单独的类/方法中并模拟它。然后在集成测试中测试流畅的部分。
,除了 Leonard 的想法外,您可能还想考虑实现一个特殊的 ThisResponse implements IDefaultResponse
,它始终为每个模拟方法调用返回模拟实例,并为您的流畅 API 类使用 Mock(defaultResponse: ThisResponse.INSTANCE)
( es)。只要测试中使用的 fluent API 方法应该返回 this
或至少另一个给定类型的对象,这就会很好地工作。只有在返回另一种类型的地方,您才需要存根。
查看 this answer 了解更多详情。只要您用一点 MCVE 更新您的问题,如果您在使用该解决方案时遇到任何问题,也可以提出后续问题。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。