junit检测测试是否是唯一一次运行

时间:2018-01-23 04:47:46

标签: java junit

我有这样的测试:

@Test public void testInfinite() {
    if (!testIsTheOnlyTestWhichWillBeRun()) return; ...

我们有一个spring上下文需要一段时间来初始化 - 并且通过上面的测试和hotswapping - 这意味着我可以在几秒钟内调试更改而不是等待重启。

然而,显然将其检入CI系统是一个问题,当然我偶然做了几次。我想知道它是否可能(没有更改testrunner,因为我们已经在使用自定义的,很难修改)以确定它是否是唯一的测试运行。我希望能够说

GetAssetBundle

所以,底线 - 我正在寻找的是,如果我正确地点击那个测试然后在IDE中说运行 - 它会这样做 - 在所有其他情况下 - 例如我右键单击并运行全班 - 或者我是从gradle或CI做的 - 测试什么都不做,只是马上回来。

1 个答案:

答案 0 :(得分:1)

您可以评估系统属性:

@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
    }
}