繁体   English   中英

junit检测是否只有一次测试

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM