本地mvn clean install可执行测试,GitHub Actions测试数为0排查
问题排查与解决
1. 缺少JUnit 5对应的Surefire插件配置
你使用了JUnit 5,但POM中未配置maven-surefire-plugin。默认的Surefire版本可能不兼容JUnit 5,导致无法识别并运行测试类。
解决办法:在POM的<build><plugins>节点下添加Surefire插件配置:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>3.2.5</version> <dependencies> <dependency> <groupId>org.junit.platform</groupId> <artifactId>junit-platform-surefire-provider</artifactId> <version>1.10.2</version> </dependency> </dependencies> </plugin>
2. GitHub Actions拉取的分支与测试代码所在分支不匹配
你的Workflow里强制拉取feat/add-test分支,但触发条件仅针对master分支的推送和PR。如果流水线是通过master分支的事件触发的,而feat/add-test分支中没有测试代码(或未提交测试代码),自然会出现测试数为0的情况。
解决办法:
- 若要在
feat/add-test分支触发流水线,修改触发分支配置:
on: push: branches: [ master, feat/add-test ] pull_request: branches: [ master ]
- 或者移除checkout的
ref参数,让流水线自动拉取触发事件对应的分支:
- uses: actions/checkout@v3
3. Maven步骤冗余引发的潜在问题
Workflow中连续执行了mvn package -DskipTests、mvn clean install、mvn clean test,多次clean会清空target目录,虽然clean test会重新编译,但重复操作可能引发缓存或编译异常。
优化建议:简化步骤,例如合并为:
- name: Build and Run Tests run: mvn clean install
或者拆分更清晰的步骤:
- name: Compile Project run: mvn clean compile - name: Execute Tests run: mvn test
4. 测试类命名不符合Maven默认识别规则
Maven Surefire插件默认仅识别以下命名格式的测试类:
**/Test*.java**/*Test.java**/*TestCase.java
如果你的测试类命名不符合上述规则(例如命名为XXXTests.java),会被插件忽略。
解决办法:
- 修改测试类命名以符合默认规则;
- 或者在Surefire插件中配置自定义匹配规则:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>3.2.5</version> <configuration> <includes> <include>**/*Tests.java</include> </includes> </configuration> </plugin>

内容的提问来源于stack exchange,提问作者rosepalette
相关产品推荐
相关产品推荐

