鉴于以下JUnit测试,surefire将运行TestA
和TestB
两次。个人第一次测试,第二次作为测试套件的一部分。
这似乎是一种不必要的行为事实上,像IntelliJ这样的流行IDE只会在测试套件中运行一次测试。
这是一个错误吗?有没有办法配置surefire-plugin来运行这些只作为测试套件的一部分?
上提供的示例项目@RunWith(Suite.class)
@Suite.SuiteClasses({TestA.class, TestB.class})
public class TestSuite
{}
public class TestA {
@Test
public void test() {
System.out.println("=== RUN " + this.getClass());
}
}
public class TestB {
@Test
public void test() {
System.out.println("=== RUN " + this.getClass());
}
}
答案 0 :(得分:3)
Surefire只运行名称以“Test”开头或结尾的类。
但是如果在测试套件中明确列出了一个类,则无论名称模式如何都会执行它。
因此,解决方案可能是从属于套件的类名中删除“Test”。
实施例
@RunWith(Suite.class) @Suite.SuiteClasses({A.class, B.class})
public class TestSuite
{}
public class A {
@Test
public void test() {
System.out.println("=== RUN " + this.getClass());
}
}
public class B {
@Test
public void test() {
System.out.println("=== RUN " + this.getClass());
}
}
答案 1 :(得分:2)
有没有办法配置surefire-plugin来运行这些只作为测试套件的一部分?
是。您可以指定要运行的测试,并且只包括套件:
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<includes>
<include>TestSuite.class</include>
</includes>
</configuration>
</plugin>
A
和B
将不再单独运行。请注意,如果您现在编写C
测试,除非将其添加到测试套件中,否则它将无法运行。