我有類似於以下結構的方法。如何編寫JUNIT測試用例進行嘲諷?
method1(Object obj,byte[] myarray)
{
mymanager.dbcall1();
mymanager2.dbcall2();
}
現在我想寫JUnit測試用例這實際上可以嘲笑這些經理誰在做dbcalls?最後,我想比較的結果。這些管理器僅在應用程序運行時纔可用。
我有類似於以下結構的方法。如何編寫JUNIT測試用例進行嘲諷?
method1(Object obj,byte[] myarray)
{
mymanager.dbcall1();
mymanager2.dbcall2();
}
現在我想寫JUnit測試用例這實際上可以嘲笑這些經理誰在做dbcalls?最後,我想比較的結果。這些管理器僅在應用程序運行時纔可用。
想測試method1()
?如果是這樣,我假設你有一個設置在封閉類mymanager
,這將使你(使用的Mockito):
@Before
public void setUp()
{
MyClass my = new MyClass();
MyManager mgr = mock(MyManager.class);
my.setManager(mgr);
// Similar for mymanager2
}
然後所有的方法調用mgr
只會返回null。如果您需要其他返回值,則可以使用doReturn(...).when(mgr).dbcall1()
結構。
乾杯,
首先,您需要一些依賴注入。有很多方法可以做到這一點,但這裏有一個簡單的一個:
private I_DatabaseManager mymanager = null;
method1(Object obj,byte[] myarray)
{
getDatabaseManager().dbcall1();
getDatabaseManager().dbcall2();
}
private I_DatabaseManager getDatabaseManager() {
if (mymanager == null) {
return getProductionImplementationOfDatabaseManager();
}
return mymanager;
}
protected void setDatabaseManagerImplementation(I_DatabaseManager newImplementation) {
mymanager = newImplementation;
}
然後,在你測試代碼,你可以創建一個實現I_DatabaseManager接口模擬類,並設置在測試這個模擬implementaion。
持有method1的類,它是否具有mymanager或mymanager2的getter和setter?它們在運行時如何創建? – 2013-03-14 13:17:30
由@Resource管理 – user1844840 2013-03-14 13:27:33