如何实现项目中任意测试套件运行时自动执行指定测试类?
实现测试类在所有集成测试套件中自动执行的方案
针对JUnit 4的解决方案
自定义自动包含测试类的Suite
既然你现在用@SuiteClasses指定测试类,不想每次新增套件都手动加TestClass,可以写一个自定义Suite类,让所有套件继承它,自动把TestClass加入测试集合:
- 编写自定义Suite类,继承JUnit自带的
Suite,重写类加载逻辑:
import org.junit.runners.Suite; import org.junit.runners.model.InitializationError; import org.junit.runners.model.RunnerBuilder; import java.util.ArrayList; import java.util.Arrays; import java.util.List; public class AutoIncludeTestSuite extends Suite { public AutoIncludeTestSuite(Class<?> suiteClass, RunnerBuilder builder) throws InitializationError { // 调用父类构造器,传入合并后的测试类列表 super(suiteClass, builder, getCombinedTestClasses(suiteClass)); } private static Class<?>[] getCombinedTestClasses(Class<?> suiteClass) { // 获取当前套件原本指定的测试类 SuiteClasses originalClasses = suiteClass.getAnnotation(SuiteClasses.class); List<Class<?>> combinedClasses = new ArrayList<>(Arrays.asList(originalClasses.value())); // 自动添加需要全局执行的TestClass combinedClasses.add(TestClass.class); return combinedClasses.toArray(new Class<?>[0]); } }
- 改造所有测试套件,把原来的
@RunWith(Suite.class)替换成@RunWith(AutoIncludeTestSuite.class):
@RunWith(AutoIncludeTestSuite.class) @SuiteClasses({/* 原有测试类 */}) public class IntegrationTestSuite1 { }
以后新增套件时,只要用这个自定义Suite,就会自动带上TestClass,不用再手动配置。
全局测试执行(构建工具层面)
如果希望只要运行项目集成测试,不管是不是通过套件都自动执行TestClass,可以直接在构建工具里配置:
Maven Surefire插件配置
在pom.xml的maven-surefire-plugin里添加额外的测试类指定:
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>3.2.5</version> <configuration> <includes> <!-- 保留原有测试类匹配规则 --> <include>**/*IntegrationTest.java</include> <!-- 强制添加需要全局执行的测试类 --> <include>**/TestClass.java</include> </includes> </configuration> </plugin> </plugins> </build>
Gradle配置
在build.gradle的test任务里添加:
test { include '**/*IntegrationTest.class' include '**/TestClass.class' }
针对JUnit 5的升级方案(可选)
如果后续升级到JUnit 5,用@Suite注解的话,可以通过两种方式实现:
- 编写一个
TestExecutionListener,在测试套件启动时自动添加TestClass; - 定义一个全局父套件,所有业务套件继承它,父套件中同时包含业务测试类和
TestClass。
内容的提问来源于stack exchange,提问作者HARSHA VARDHANSAI
相关产品推荐
相关产品推荐

