-3

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

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

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

4

3 回答 3

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()可以使用该构造。

干杯,

于 2013-03-14T13:20:31.080 回答
0

给你,我搜索了堆栈溢出,发现了很多以前有人问过的东西:

使用 JUnit 测试 EJB

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

于 2013-03-14T13:21:55.003 回答
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 接口的模拟类,并在您的测试中设置这个模拟实现。

于 2013-03-14T13:24:37.673 回答