JUnit:模拟的DBCursor无法正常工作

时间:2018-07-02 11:19:29

标签: java mongodb junit mocking

我在模拟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);  
}

0 个答案:

没有答案