maven - 当单元测试花费太长时间时,构建失败

2022-09-03 01:03:37

在我的项目中,我有很多用JUnit和TestNG编写的单元测试。构建过程基于带有surefire插件的maven。

当至少一个单元测试花费太多秒时,maven有没有办法/插件使构建失败?我知道在 TeamCity, Jenkins 中有一些插件无法构建,但这“太远了”。

在我的项目中,我只想进行快速测试,以使单元测试过程有效。我可以改进我的旧测试,但我需要为未来的承诺提供保护


答案 1

如果你所有的测试都扩展了一些基类,我认为你可以坚持下去,这将适用于所有子类。@Rule@Test

例如:

import org.junit.rules.Timeout;
public abstract class BaseTestConfiguration {
    @Rule public Timeout testTimeout = new Timeout(60000); // 60k ms = 1 minute
}

public class ThingTests extends BaseTestConfiguration {
    @Test
    public void testThis() {
        /*will fail if not done in 1 minute*/
    }
    @Test
    public void testThat() {
        /*will fail if not done in 1 minute*/
    }
}

我们发现这是最简单的,而不是弄乱AspectJ或秘密配置指令。开发人员更有可能弄清楚Java部分,而不是所有秘密的XML。您也可以将和任意数量的其他 junit 指令放在基类中。@Before@After


答案 2

在 maven surefire 中,您可以使用 forkedProcessTimeoutInSeconds 以及 .forkMode=once

如果花费的时间太长,这将杀死分叉的jvm。如果你想对每个测试都这样做,你可以forkMode=pertest或forkMode=always(这对每个类都这样做)。