如何配置Maven实现各测试类独立执行,与手动命令行执行效果一致
解决方案
原配置不生效的原因
你配置的多执行项没有生效,核心是maven-surefire-plugin默认内置了一个id为default-test的执行逻辑,会默认扫描执行所有符合命名规则的测试类,和你自定义的三个执行项同时生效,出现配置冲突、执行逻辑重叠的问题。
方案1:修改原配置实现指定测试类依次独立执行
如果你的测试类是固定的Test1、Test2、Test3,只需要在原有插件配置的executions节点下,新增禁用默认执行的配置即可:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>${maven-surefire-plugin.version}</version> <executions> <!-- 禁用默认的全量测试执行 --> <execution> <id>default-test</id> <phase>none</phase> </execution> <!-- 以下是你原来的三个自定义执行项 --> <execution> <id>test1</id> <goals> <goal>test</goal> </goals> <configuration> <includes> <include>**/Test1.java</include> </includes> </configuration> </execution> <execution> <id>test2</id> <goals> <goal>test</goal> </goals> <configuration> <includes> <include>**/Test2.java</include> </includes> </configuration> </execution> <execution> <id>test3</id> <goals> <goal>test</goal> </goals> <configuration> <includes> <include>**/Test3.java</include> </includes> </configuration> </execution> </executions> </plugin>
配置完成后执行mvn test,就会依次执行三个测试类,和你手动执行三次命令的测试执行效果一致。
方案2:通用配置实现所有测试类自动独立执行
如果你不需要手动指定测试类,希望所有测试类都自动分别独立执行(每个测试类使用独立的JVM,类加载环境完全隔离,和单独执行mvn -Dtest=xxx test的运行环境完全等价),可以使用以下更简洁的配置,不需要逐个定义执行项:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>3.1.2</version> <!-- 建议使用2.22.0以上的稳定版本 --> <configuration> <!-- 每次只启动1个测试进程 --> <forkCount>1</forkCount> <!-- 不复用JVM,每个测试类都启动全新JVM --> <reuseForks>false</reuseForks> <!-- 可选:指定测试执行顺序 --> <runOrder>alphabetical</runOrder> </configuration> </plugin>
该配置会自动扫描所有符合命名规则的测试类,逐个在独立的JVM进程中执行,完全满足你需要的独立执行效果。
内容的提问来源于stack exchange,提问作者ka3ak
相关产品推荐
相关产品推荐

