maven - 当单元测试耗时太长时失败

luk*_*ymo 16 java testing junit build-process maven

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

当至少一个单元测试花费太多秒时,maven是否有任何方法/插件可以使构建失败?我知道有一些插件可以在TeamCity,Jenkins中构建失败,但这"太过分了".

在我的项目中,我希望只有快速测试才能使单元测试过程有效.我可以改进旧的测试,但我需要保护未来的承诺

Jas*_*ger 12

如果你的所有测试扩展了一些基类,我认为你可以坚持@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*/
    }
}
Run Code Online (Sandbox Code Playgroud)

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


Mat*_*ell 6

在maven surefire中,您可以使用forkedProcessTimeoutInSecondsforkMode=once.

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


nde*_*rge 0

我曾经有过同样的需求,由于我使用的是TestNG,所以我使用了“组功能”

如果您无法使用 JUnit,请尝试使用测试套件 (http://stackoverflow.com/questions/817135/grouping-junit-tests)