我有一个JUnit测试套件的形式:
@RunWith(Suite.class)
@Suite.SuiteClasses( { xx.class, yy.cass })
public class AllTests {
public static Test suite() {
TestSuite suite = new TestSuite(AllTests.class.getName());
//$JUnit-BEGIN$
//$JUnit-END$
return suite;
}
}
Run Code Online (Sandbox Code Playgroud)
然后调用这样的vanilla测试:
public class xxx {
@Test
public void test () throws {
...
Run Code Online (Sandbox Code Playgroud)
我有一种情况,如果在第一次测试中出现错误或失败,我想停止运行测试套件的其余部分.但是其他错误/失败是可以的,套件应该完成尽可能多的其他测试.基本上,第一次测试失败将表明运行其余测试是不安全的.
这可能吗?
小智 13
首先你需要junit RunListener:
import org.junit.runner.notification.Failure;
import org.junit.runner.notification.RunListener;
import org.junit.runner.notification.RunNotifier;
public class FailureListener extends RunListener {
private RunNotifier runNotifier;
public FailureListener(RunNotifier runNotifier) {
super();
this.runNotifier=runNotifier;
}
@Override
public void testFailure(Failure failure) throws Exception {
super.testFailure(failure);
this.runNotifier.pleaseStop();
}
}
Run Code Online (Sandbox Code Playgroud)
然后准备套房:
public class StopOnFailureSuite extends Suite {
public StopOnFailureSuite(Class<?> klass, Class<?>[] suiteClasses) throws InitializationError {
super(klass, suiteClasses);
}
public StopOnFailureSuite(Class<?> klass) throws InitializationError {
super(klass, klass.getAnnotation(SuiteClasses.class).value());
}
@Override
public void run(RunNotifier runNotifier) {
runNotifier.addListener(new FailureListener(runNotifier));
super.run(runNotifier);
}
}
Run Code Online (Sandbox Code Playgroud)
并运行您的套房:
@RunWith(StopOnFailureSuite.class)
@Suite.SuiteClasses({
FirstTestClass.class,
SecondTestClass.class,
...
})
Run Code Online (Sandbox Code Playgroud)
打电话System.exit()怎么了?
如果是第一次测试,则考虑将其验证移至@BeforeClass并在失败时引发异常。如果出现此异常,则仅运行@AfterClass方法。
当然,这样一来,您将缺少在测试设置方法中创建的所有夹具工件。
| 归档时间: |
|
| 查看次数: |
27023 次 |
| 最近记录: |