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

Geo*_*met 16 eclipse junit intellij-idea maven-3 jenkins

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

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

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

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

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

Geo*_*met 9

这个工作在默认情况下,在Maven中,的IntelliJ和Eclipse:

import static org.junit.Assume.assumeTrue;

@Test
public void mySlowTest() {
    assumeTrue("true".equals(System.getProperty("runSlowTests")));
    ...
}
Run Code Online (Sandbox Code Playgroud)

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

从语义上讲,这是完全错误的.但它的工作原理:)

  • @dant3 查看为什么这不满足我们的要求的问题。我们仍然希望在 jenkins 服务器上的压力作业构建上运行这些压力测试。忽略将始终忽略它们。 (2认同)

Ale*_*lex 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>
Run Code Online (Sandbox Code Playgroud)

然后tests.exclude在某些maven配置文件中定义.

在JUnit中维护测试套件对于当前版本的JUnit来说确实是太多了,正如我在博文中所写的那样.我还解释了一个名为cpsuite的库如何自动为您执行Suite管理:

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

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