我有一个这样的测试:
@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/