2013-03-14 296 views
-3

我有類似於以下結構的方法。如何編寫JUNIT測試用例進行嘲諷?

method1(Object obj,byte[] myarray) 
{ 
    mymanager.dbcall1(); 
    mymanager2.dbcall2(); 
} 

現在我想寫JUnit測試用例這實際上可以嘲笑這些經理誰在做dbcalls?最後,我想比較的結果。這些管理器僅在應用程序運行時纔可用。

+0

持有method1的類,它是否具有mymanager或mymanager2的getter和setter?它們在運行時如何創建? – 2013-03-14 13:17:30

+0

由@Resource管理 – user1844840 2013-03-14 13:27:33

回答

1

想測試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()結構。

乾杯,

0

在這裏,你走了,我搜索了堆棧溢出,發現相當多的東西之前已經有人問:它是基於EJB

Testing an EJB with JUnit

,但我們不知道是什麼你現在正在使用,但這可能有一些共同的原則。

0

首先,您需要一些依賴注入。有很多方法可以做到這一點,但這裏有一個簡單的一個:

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。