我有一套非常慢的测试,需要一周时间才能运行。 (他们实际上不停地运行一些代码大约一周)。
当然,没有开发人员(甚至是默认的构建作业)想要运行这些测试。只有特定的单独构建作业才有时间运行它们。所以默认情况下需要禁用这些测试。
JUnit的categories似乎是完美的:我使用@Category(SlowTests.class)
注释了这些慢速测试。问题是它们仍在运行,因为:
如何在不使用显式TestSuite的情况下,默认情况下排除一类慢速JUnit测试?
答案 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,这样每个人都可以控制运行那些测试或不应该是默认的