java - junit 检测测试是否是唯一运行的一个

标签 java junit

我有一个这样的测试:

@Test public void testInfinite() {
    while (true) {runSomeOtherTest();waitForSomeSignal();}

我们有一个 spring 上下文,需要一段时间才能初始化 - 并且通过上述测试和热交换 - 这意味着我可以在几秒钟内调试更改,而不是等待重新启动。

但是,显然将其检查到 CI 系统中有点问题,当然,我已经不小心做了好几次了。我想知道是否有可能(无需更改测试运行程序,因为我们已经在使用自定义测试运行程序,很难修改)来确定它是否是唯一正在运行的测试。例如我想说

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

所以,底线 - 我正在寻找的是,如果我右键单击该测试并在 IDE 中运行 - 它会执行此操作 - 在所有其他情况下 - 例如,我右键单击并运行整个测试class - 或者我从 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
    }
}

关于java - junit 检测测试是否是唯一运行的一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48394429/

相关文章:

用于日志记录的 Java 对象序列化

java - JSF 中的托管 bean

java - 检查 RDD 的相等性

java - JUnit 如何知道要测试哪个类?

java - IText - 使用 PdfDictionary 和 PDF Stamper 编辑西类牙语文档

java - 请问,如何让代码在两台计算机或用户获胜后终止

java - try-with-resources 和 HikariCP 的连接泄漏

java - Concordion - 需要显示一堆数据而不检查值

java - JUnit 测试杀死守护进程

spring - junit中的ContextConfiguration继承