[英]junit detect if a test is the only one run
我有这样的测试:
@Test public void testInfinite() {
while (true) {runSomeOtherTest();waitForSomeSignal();}
我们有一个spring上下文,需要花一些时间进行初始化-并通过上述测试和热插拔-这意味着我可以在几秒钟内调试更改,而不必等待重新启动。
但是,显然将其检入CI系统是一个问题,当然,我无意间做了几次。 我想知道是否有可能(无需更改testrunner,因为我们已经在使用定制的,很难修改)来确定它是否是唯一运行的测试。 我想说
@Test public void testInfinite() {
if (!testIsTheOnlyTestWhichWillBeRun()) return; ...
因此,最重要的是-我要寻找的是,如果我在IDE中右键单击该测试并说运行,它将在其他情况下执行该操作-例如,我单击鼠标右键并运行整个类-或我是通过gradle或CI来完成的-测试不执行任何操作,只是立即返回。
您可以评估系统属性:
@Test public void testInfinite() {
if (!"true".equals(System.getProperty("junit.runloop"))) {
return;
}
}
在您的IDE /本地运行中,然后可以使用-Djunit.runloop = true运行测试。
为了不污染测试用例本身,您可以编写一个执行以下操作的JUnit规则:
public class TestInfinite implements TestRule {
@Override
public Statement apply(Statement base, Description description) {
return new Statement() {
public void evaluate() throws Throwable {
do {
base.evaluate();
} while ("true".equals(System.getProperty("junit.runloop")));
}
};
}
}
因此,在测试中,您可以将它们附加:
public class YourTest {
@Rule public TestInfinite = new TestInfinite();
@Test public void testInfinite() {
// this will be run once if property is not set,
// in an endless loop if it is
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.