2017-04-21 26 views
1

我在Mockito中有幾個測試,我嘗試將它轉換爲EasyMock,但我不知道如何。在Mockito我可以使用spy,如何實現這樣的東西。如何在EasyMock中替代間諜

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()); 

} 
+0

確實[這個問題](http://stackoverflow.com/questions/28448347/)和它的回答可以幫助你? – Laf

+0

不多,我無法根據需要調整代碼 – user7902809

回答

1

簡短的回答:你不能用EasyMock的做到這一點。

較長的回答:EasyMock不能「替代」現有類的方法,它只能生成繼承者。因此,漫遊將爲TTTObject生成模擬並將所有來自模擬的呼叫重定向到原始的一個TTTObject。

Check this link for more information