我有一组很慢的测试,这需要一个星期才能运行。 (他们几乎运行一些代码,不停地换一个星期左右)。
当然,没有开发者(甚至默认构建工作)要运行这些测试。 只有特定的,独立的构建工作已经运行它们的时间。 因此, 需要在默认情况下禁用这些测试 。
JUnit的类别似乎为这个完美的:我的注释慢测试与@Category(SlowTests.class)
问题是,他们仍然运行,因为:
- 我不想保持的TestSuite类,因为我们每天都在增加的测试。 我有0的TestSuite类:Maven的,的IntelliJ和Eclipse只是从我的模块运行所有测试类。 包括所有那些缓慢的测试。
- 即使我们有TestSuite的班,大多数开源贡献者仍然会尝试从的IntelliJ或Eclipse中运行所有测试类,认为它挂起,放弃跑步测试。 这些慢的测试需要在默认情况下被排除。 优选没有在的IntelliJ或者Eclipse任何额外的配置。
如何排除在默认情况下缓慢JUnit测试类别,而不使用一个明确的TestSuite?
这是通过默认情况下,在Maven中,的IntelliJ和Eclipse:
import static org.junit.Assume.assumeTrue;
@Test
public void mySlowTest() {
assumeTrue("true".equals(System.getProperty("runSlowTests")));
...
}
如果想运行它们,只需添加VM参数-DrunSlowTests=true
。
从语义上讲,这是完全错误的。 但是,它的工作原理:)
据我所知,应该没有阻止从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>
然后定义tests.exclude
在某些行家轮廓。
保持JUnit测试确实与JUnit的当前版本的工作太多了,因为我已经在写了一个博客帖子 。 我还解释如何图书馆称为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默认会还只是运行所有Java文件用@Test
在他们的诠释。
为什么不能让集成测试出缓慢行进试验。 使用Maven的故障保护,插件,它会通过不同的命名规则处理这样的情况。 例如* IT.java其Themen长奔跑测试。 此外,我建议把激活成profilr所以每个人都可以控制来运行这些测试或不应该是默认
文章来源: Do not run a category of slow JUnit tests by default in Maven and every IDE (Eclipse, IntelliJ, …) without an explicit TestSuite