我正在使用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()
?我知道在套房里传球不会这样做。因此,我只是改变了我的测试用例,以便在每次测试中实例化所有必需的对象。
答案 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。
祝你好运!