java - JUnit:模拟 DBCursor 不能正常工作
问题描述
我有一些模拟 JacksonDBCollection 的问题,如果我尝试测试我的方法(参见下面的代码),那么我会遇到这些异常:
java.lang.NullPointerException
at org.mongojack.DBCursor.<init>(DBCursor.java:85)
at org.mongojack.JacksonDBCollection.find(JacksonDBCollection.java:1156)
.....
问题是这一行:DBCursor<MyObject> cursor = mongojackCol.find(searchQuery);
因为 dbCursor 为空。我怎样才能模拟 mongojackCol,以返回模拟的dbCursor(见这一行:) dbCursor = (DBCursor<MyObject>)mock(DBCursor.class)
?谢谢
public MyObject getMyObjectById(String id) {
JacksonDBCollection<MyObject, String> mongojackCol =
JacksonDBCollection.wrap(collection, MyObject.class, String.class);
MyObject myObject = null;
try {
ObjectId objectId = new ObjectId(id);
BasicDBObject searchQuery = new BasicDBObject();
searchQuery.put(MyObject.MONGO_ID, objectId);
DBCursor<MyObject> cursor = mongojackCol.find(searchQuery);
if (cursor.hasNext()) {
myObject = cursor.next();
}
} catch (IllegalArgumentException e) {
return myObject;
}
return myObject;
}
@Test
public void getMyObjectByIdTest() {
db = mock(DB.class);
dbCollection = mock(DBCollection.class);
dbCursor = (DBCursor<MyObject>)mock(DBCursor.class);
jacksonDBCollection = (JacksonDBCollection<MyObject, String>)mock(JacksonDBCollection.class);
MyObject myObject = new MyObject(x, y);
when(dbCursor.size()).thenReturn(1);
when(dbCursor.next()).thenReturn(myObject);
when(jacksonDBCollection.find(any(BasicDBObject.class))).thenReturn(dbCursor);
MyObject dr = mongoStoreDAO.getMyObjectById("abababababababababababab");
assertThat(dr).isEqualTo(myObject);
}
解决方案
推荐阅读
- vbscript - 使用 Alt Tab 并等待窗口变为活动状态
- parsing - Parser 的使用有意义吗?
- mocking - 你如何用玩笑来模拟 lodash debounce.cancel?
- java - 无论程序是从 jar 还是从 IDE 运行,如何将文件写入正确的目录?
- android - 从我的应用程序打开的 PDF 文件无法共享
- sql - 如何选择由 2 个单词组成的所有名称
- python-3.x - 没有模块命名的套接字
- angular - 在 Mapbox 中添加新标记之前删除以前的标记
- node.js - 如何通过 HTTP Get 请求使用 Express、Node JS 和 Angular 返回对象数组
- r - 在不分离分组变量的情况下均匀拆分数据帧