2013-03-14 134 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。