如何编写JUNIT测试用例进行模拟?

时间:2013-03-14 13:15:13

标签: java junit mocking

我的方法类似于以下结构。

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

现在我想编写JUNIT测试用例,它可以实际模拟这些正在进行dbcalls的经理吗?最后我想比较结果。这些管理器仅在应用程序运行时可用。

3 个答案:

答案 0 :(得分:1)

您想测试method1()吗?如果是这样,我假设您在封闭类中有mymanager的setter,这将使您(使用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()结构。

干杯,

答案 1 :(得分:0)

在这里,我搜索了堆栈溢出,发现了之前有人问过的东西:

Testing an EJB with JUnit

它基于EJB,但我们现在不知道你在使用什么,但这可能有一些共同的原则。

答案 2 :(得分: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接口并在您的测试中设置此模拟实现。