默认情况下,不要在Maven和每个IDE(Eclipse,IntelliJ,...)中运行一类慢速JUnit测试,而不使用显式的TestSuite

时间:2013-04-08 08:36:05

标签: eclipse junit intellij-idea jenkins maven-3

我有一套非常慢的测试,需要一周时间才能运行。 (他们实际上不停地运行一些代码大约一周)。

当然,没有开发人员(甚至是默认的构建作业)想要运行这些测试。只有特定的单独构建作业才有时间运行它们。所以默认情况下需要禁用这些测试

JUnit的categories似乎是完美的:我使用@Category(SlowTests.class)注释了这些慢速测试。问题是它们仍在运行,因为:

  • 我不想维护TestSuite类,因为我们每天都会添加测试。我有0个TestSuite类:Maven,IntelliJ和Eclipse只运行我的模块中的所有Test类。包括所有那些缓慢的测试。
  • 即使我们有TestSuite类,大多数开源贡献者仍然会尝试从IntelliJ或Eclipse运行所有Test类,认为它挂起并放弃运行测试。默认情况下,需要排除那些缓慢的测试。最好在IntelliJ或Eclipse中没有任何额外配置。

如何在不使用显式TestSuite的情况下,默认情况下排除一类慢速JUnit测试?

3 个答案:

答案 0 :(得分:8)

默认情况下适用于Maven,IntelliJ和Eclipse

import static org.junit.Assume.assumeTrue;

@Test
public void mySlowTest() {
    assumeTrue("true".equals(System.getProperty("runSlowTests")));
    ...
}

无论如何要运行它们,只需添加VM参数-DrunSlowTests=true

从语义上讲,这是完全错误的。但它有效:)

答案 1 :(得分:7)

据我所知,默认情况下无法阻止Eclipse运行某些测试。

使用

从Maven运行某些类别非常简单
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.12.4</version>
    <configuration>
        <excludedGroups>${tests.exclude}</excludedGroups>
    </configuration>
</plugin>

然后在某些maven个人资料中定义tests.exclude

在JUnit中维护测试套件确实对我当前版本的JUnit工作太多了,正如我在a blogpost中所写的那样。我还解释了a library called cpsuite如何为您自动执行套件管理:

@RunWith(ClasspathSuite.class) // Loads all unit tests it finds on the classpath
@ExcludeBaseTypeFilter(SlowTest.class) // Excludes tests that inherit SlowTest
public class FastTests {}

但是,在这两种方法中,Eclipse默认情况下仍会运行所有带有@Test注释的Java文件。

答案 2 :(得分:1)

为什么不在慢速运行测试中进行集成测试。使用maven-failsafe-plugin,它将通过不同的命名约定来处理这种情况。例如,* IT.java是Themen长期运行测试。此外,我建议将激活放入一个profilr,这样每个人都可以控制运行那些测试或不应该是默认的