如何从头开始运行 JUnit 类或测试方法



我在不同的测试文件夹中有 JUnit 测试,当我一个接一个地运行它们时,所有测试都是绿色的,所有测试都在特定文件夹中通过,但是当它在范围内完成时(一次全部(,由于某些数据在以前的测试执行期间发生了更改,某些测试失败了。所以这是一种从头开始运行 JUnit 测试的方法,我已经尝试过

mvn "-Dtest=TestClass1,TestClass2" test

但有些测试失败了。当它像这样完成时:

mvn "-Dtest=TestClass1" test

都过去了。或者当:

`mvn "-Dtest=TestClass2" test

都过去了。

只要TestClass1TestClass2共享共同的状态,就可能无法将它们一起运行,例如,它可能是JVM中某个static字段。您必须重构测试,以便它们被隔离并且没有副作用,例如,使用@Before@After在测试后清理资源。

您可以使用Maven Surefire插件选项为每个测试生成一个新的JVM,但效率非常低。

对于此特定问题,您可以创建一个测试套件。

创建两个测试套件类 将@RunWith(套件.class(注释附加到类中。

import org.junit.runner.RunWith;
import org.junit.runners.Suite;
@RunWith(Suite.class)
@Suite.SuiteClasses({
TestJunit1.class
})
public class JunitTestSuite1 {   
}  

@RunWith(Suite.class)
@Suite.SuiteClasses({
TestJunit2.class
})
public class JunitTestSuite2 {   
}  

public class TestRunner {
public static void main(String[] args) {
Result result1 = JUnitCore.runClasses(JunitTestSuite1.class);
Result result2 = JUnitCore.runClasses(JunitTestSuite2.class);
for (Failure failure : result1.getFailures()) {
System.out.println(failure.toString());
}
for (Failure failure : result2.getFailures()) {
System.out.println(failure.toString());
}

System.out.println(result1.wasSuccessful());
System.out.println(result2.wasSuccessful());
}
} 

最新更新