Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unit testing PowerMock+EasyMock意外的方法调用_Unit Testing_Junit4_Easymock_Powermock - Fatal编程技术网

Unit testing PowerMock+EasyMock意外的方法调用

Unit testing PowerMock+EasyMock意外的方法调用,unit-testing,junit4,easymock,powermock,Unit Testing,Junit4,Easymock,Powermock,我有一个这样的方法,我想进行单元测试 public void update(String collectionName, BasicDBObject query, BasicDBObject updateObj){ try{ DBCollection collection = getCollection(collectionName); collection.update(query, updateObj, true, false); } cat

我有一个这样的方法,我想进行单元测试

public void update(String collectionName, BasicDBObject query, BasicDBObject updateObj){
    try{
        DBCollection collection = getCollection(collectionName);
        collection.update(query, updateObj, true, false);

    } catch (MongoException e) {
        if (e.getMessage().startsWith("can't call something")) {
               refreshConnection(collectionName);
            } else {
                throw e;
            }
    }
}
测试代码如下所示。我在单元测试用例的注释中尝试了这两种方法,目前已经对其进行了注释

@Test
public void testUpdate(){
    MongoStore store = PowerMock.createStrictPartialMockForAllMethodsExcept(MongoStore.class, "update");
    DBCollection collection = PowerMock.createMock(DBCollection.class);

    BasicDBObject updateobj = new BasicDBObject("test","shrikar");
    String name = "testcoll";
    String id = "123";
    BasicDBObject query = new BasicDBObject("id",id);
    EasyMock.expect(store.getCollection(name)).andReturn(collection);
    //EasyMock.expect(collection.update(EasyMock.anyObject(BasicDBObject.class),EasyMock.anyObject(BasicDBObject.class),EasyMock.anyBoolean(),EasyMock.anyBoolean()));
    //EasyMock.expect(collection.update(query,updateobj,true,false));
    PowerMock.replayAll();
    store.update(name,query,updateobj);
    EasyMock.expectLastCall().times(1);

    PowerMock.verifyAll();
}
在所有的情况下,我总是

Unexpected Method call DBCollection.update({"id":"123"},{"test":"shrikar"}, true, false)

我遗漏了什么?

好的,我发现了我忘记将Mongo*.class添加到PrepareForTest的问题

@PrepareForTest({MongoStore.class,MongoOptions.class,Mongo.class, BasicDBObject.class,DBCursor.class,DBObject.class})