JUnitCore run()方法在每次测试之前不会隐式调用setUp()

时间:2010-08-20 00:00:46

标签: java unit-testing junit

我正在使用JUnitCore的run(junit.framework.Test test)为JUnit测试用例创建一个自定义测试运行器并传入ClassName.suite()。我的测试运行,但返回的结果是null。似乎没有在setUp()方法中初始化对象导致setUp()显然永远不会被调用,即使使用@Before注释也是如此。如果我实例化每个测试方法中所需的每个对象,则测试成功。然而,这种方法很乏味,并且违背了测试课程的目的。这种行为是否正常? JUnit是否有更好的测试运行器,它们反映了与Eclipse中的测试运行器相同的行为?感谢。

以下是跑步者的代码:

public class TestRunner
{
    Result res = new Result();
    String results = new String();
    JUnitCore runner = new JUnitCore();

    protected TestRunner()
    {
    }

    public String runReport(Test input)
    {
        System.out.println(input.toString());
        res = runner.run(input);
        String testClass = "Class: ";
        String testFailCt = "Failure Count: ";
        String testFalures = "Failures: ";
        String testRunCt = "Runs: ";
        String testRunTm = "Run Time: ";
        String testSuccess = "Success: ";
        String newln = "\n";
        results += testClass + input.getClass() + newln;
        results += testFailCt + res.getFailureCount() + newln;
        results += testFalures + newln;
        List<Failure> failures = res.getFailures();
        int i = 0;
        for (Failure x: failures)
        {
            i++;
            results += i +": " + x + newln;
        }
        results += testRunCt + res.getRunCount() + newln;
        results += testRunTm + res.getRunTime() + newln;
        results += testSuccess + res.wasSuccessful() + newln;
        return results;
    }
}

以下是从另一个类调用runReport()方法的方法:

runner.runReport(TestClassName.suite());

我应该将哪些内容传递到run(),以便在每次测试之前隐式调用setUp()?我知道在套房里传球不会这样做。因此,我只是改变了我的测试用例,以便在每次测试中实例化所有必需的对象。

1 个答案:

答案 0 :(得分:2)

  

... setUp()显然永远不会被调用,即使使用@Before注释也是如此。

JUnit版本4具有注释支持 - 我认为junit.framework表示您使用的是版本3。 如果您使用JUnit 3 TestRunner运行JUnit 4测试,您可能会发现这些感兴趣的文章:

JUnit Test Runner that creates tests just before running them

JUnit FAQ - 参见“编写测试”一节。 3。

An early look at JUnit 4

祝你好运!