0

我正在学习 JUnit,我必须多次测试一个方法。我必须根据两个参数(环境和案例#)测试该方法。我正在两个环境中工作,我必须检查相同的 Case# 是否在不同环境之间产生相同的结果。这是测试用例:

public class AppStartTest
{

/**
 * Test method for {@link archive.AppStart#beginOper(java.lang.String)}.
 */

List<String> actualSections = new ArrayList<String>();
List<String> environments = new ArrayList<String>();
List<String> cases = new ArrayList<String>();

@Before
public void prepareTest()
{
    environments.add("env1");
    environments.add("env2");
    cases.add("case1");
    //cases.add("case2");
    cases.add("case3");
    cases.add("case32");
    cases.add("case4");
    cases.add("emp3");

}

@Test
public void testBeginOper()
{
    for (String caseStr : cases)
    {
        @SuppressWarnings("unchecked")
        Map<String, Integer> mapList[] = new HashMap[2];
        int i = 0;
        for (String env : environments)
        {
            System.out.println("Starting " + env + "-" + caseStr);
            AppStart a = new AppStart();
            mapList[i] = a.beginOper(env + "-" + caseStr, true);
            printMap(mapList[i++]);             
        }
                    //Using assert in this method
        compareResults(mapList[0], mapList[1], caseStr);
    }
}   
}

结果作为单个测试用例产生,但我要求结果为:

testBeginOper[0]
testBeginOper[1]
testBeginOper[2]
.....

我尝试使用参数化测试用例,但测试方法将独立执行。我必须比较两个环境之间的结果,我需要带有@Test 的方法返回一些值(方法应该是无效的)然后断言。请指教。

4

1 回答 1

0

我能想到的最简单的解决方案是根本没有testBeginOper()注释,@Test而只是一个标准的、非测试的、返回值的、接受参数的函数。然后你有一个带@Test注释的函数,它运行你的各种版本testBeginOper(),收集结果然后比较它们。它可能看起来像这样:

private Map<String, Integer> testBeginOper(String environment, String case) {
    // do your actual tests using the given parameters "environment" and "case"
}

@Test
public void runTests() {
    List<Map<String, Integer>> results = new ArrayList<>();
    for(String environment : environments) {
        for(String case : cases) {
            results.add(testBeginOper(environment, case));
        }
    }
    // now compare your results
}

当然还有其他选择,一种是编写自己的 TestRunner,但这可能是迄今为止最简单的解决方案。

于 2014-06-26T21:21:37.280 回答