【问题标题】:Mocking mongo queries模拟 mongo 查询
【发布时间】:2017-03-31 11:35:36
【问题描述】:

我想将我的查询模拟为一个 mongo 集合,并确认在查询中设置了正确的参数。

被测试的代码是

Bson query = eq("name",name);
if (version!=null) {
    query = and(query,eq("version",version));
}
Document retrievedDoc =  collection.find(query).sort(descending("version")).first();

而我要写的测试是

Bson query = and(eq("name","test.TestClass"),eq("version",1));
when(collection.find(<some matcher>).thenReturn(result);

但是 Bson 没有实现 equals 并且没有任何明显的方法来获取它的任何内容来编写自定义匹配器或测试捕获的 Bson。

虽然我认为这并不重要,但我正在使用 mockito。

有什么好方法可以断言查询的更多内容而不是它的类?

【问题讨论】:

  • 我要补充一点,我对任何允许查询可测试性的解决方案感兴趣,即使 ti 涉及重大重构

标签: java mongodb mocking


【解决方案1】:

我也有同样的问题。 由于 Bson 没有实现 equals,所以我只使用 org.bson.Document 而不是 Bson。

我是怎么做的:

Document query = new Document("name",name);
if (version!=null) {
    query = new Document("$and", asList(query, new Document("version",version)));
}
Document retrievedDoc =  collection.find(query).sort(descending("version")).first();

测试应该是这样的:

Document query = new Document("$and", asList(new Document("name","test.TestClass"), new Document("version",1)));
when(collection.find(query).thenReturn(result);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-17
    • 1970-01-01
    • 1970-01-01
    • 2017-06-10
    • 1970-01-01
    • 2020-10-24
    • 2012-04-15
    • 2016-05-07
    相关资源
    最近更新 更多