【问题标题】:How to substitute spy in EasyMock如何在 EasyMock 中替换间谍
【发布时间】:2017-04-21 17:42:15
【问题描述】:

我在Mockito 中的测试很少,我尝试将其转换为EasyMock,但我不知道如何。在Mockito 我可以使用spy,如何达到这样的效果。

public class TTTCollection {

private MongoCollection mongoCollection;
protected MongoCollection getMongoCollection() {
    return mongoCollection;
}
private static final String dbName = "TTT";
private static final String collectionName = "ruchy";


public TTTCollection(){
    DB db = new MongoClient().getDB(dbName);
    mongoCollection = new Jongo(db).getCollection(collectionName);
}

public boolean deletedb() {
    try {
        getMongoCollection().drop();
        return true;
    } catch (Exception e) {
        return false;
    }
} 

public boolean save(TTTObject object) {
    try {
        getMongoCollection().save(object);
        return true;
    } catch (Exception e) {
    return false;
    }

在 Mockito 中进行测试:

public class TTTCollectionTest {

TTTCollection collection;
TTTObject object;
MongoCollection mongoCollection;    

@Before
public void Setup(){
    collection = spy(new TTTCollection());
    mongoCollection = mock(MongoCollection.class);
    object = new TTTObject(1,2, 2, "x");
}


@Test
public void testDeleteCollection(){
    doReturn(mongoCollection).when(collection).getMongoCollection();
    assertTrue(collection.deletedb());
}

@Test
public void testSave() {
    doReturn(mongoCollection).when(collection).getMongoCollection();
    assertTrue(collection.save(object));
} 

public class TTTCollectionEMTest extends EasyMockSupport {

TTTCollection collection;
TTTObject object;
MongoCollection mongoCollection;


@Before
public void Setup(){
    mongoCollection = EasyMock.createMock(MongoCollection.class);
    collection = new TTTCollection(); // how to spy it ?
   object = new TTTObject(1,2, 2, "x");
}

@Test
public void testDeleteCollection(){

    EasyMock.expect(collection.getMongoCollection()).andReturn(mongoCollection);
    replayAll();
    assertTrue(collection.deletedb());

}

【问题讨论】:

  • this question 及其答案对您有帮助吗?
  • 不多,我无法根据需要调整代码

标签: java mockito easymock


【解决方案1】:

简短的回答:你不能用 EasyMock 做到这一点。

更长的答案:EasyMock 不能“替换”现有类的方法,它只能生成继承者。因此,walk-around 将为 TTTObject 生成模拟并将所有调用从模拟重定向到原始的一个 TTTObject。

Check this link for more information

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-13
    • 2019-06-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多