Maven Surefire插件未执行测试阶段的配置排查请求
我之前在Groovy多模块Maven项目里也踩过完全一样的坑——Surefire死活不跑测试,编译完直接显示构建成功,连测试阶段的日志都看不到。结合你的项目结构和配置,给你梳理几个最可能的原因和解决办法:
1. 最关键的遗漏:没配置Groovy编译插件
Surefire本身不认识Groovy源码,它只能执行编译好的.class文件。你现在的配置里只加了Surefire,但没告诉Maven怎么编译src/test/java下的Groovy文件,所以这些测试类根本没被编译,Surefire自然找不到它们!
赶紧在test-groups模块的pom里加上groovy-maven-plugin,放在Surefire插件前面:
<build> <plugins> <!-- 先让Maven编译Groovy测试代码 --> <plugin> <groupId>org.codehaus.gmaven</groupId> <artifactId>groovy-maven-plugin</artifactId> <version>2.1.1</version> <executions> <execution> <goals> <goal>testCompile</goal> </goals> <configuration> <sourceDirectory>src/test/java</sourceDirectory> <includes> <include>**/*.groovy</include> </includes> </configuration> </execution> </executions> </plugin> <!-- 保留你原来的Surefire配置 --> <plugin> <artifactId>maven-surefire-plugin</artifactId> <version>2.18.1</version> <configuration> <useFile>false</useFile> <includes> <include>**/*Spec.groovy</include> <include>**/*Test.groovy</include> </includes> </configuration> </plugin> </plugins> </build>
这个插件会帮你把Groovy测试类编译成字节码,Surefire才能识别并执行它们。
2. 考虑升级Surefire版本
你用的2.18.1版本有点年头了,可能和新版Groovy存在兼容性问题。我之前升级到3.x版本后,一些奇怪的问题直接消失了,建议试试:
<plugin> <artifactId>maven-surefire-plugin</artifactId> <version>3.0.0-M7</version> <!-- 你的配置可以原封不动保留 --> </plugin>
3. 检查测试类的细节
确认一下你的测试类是否符合要求:
- 类名确实匹配你配置的
*Test.groovy规则(你的TestClass.groovy是符合的,没问题) - 目录结构和包名一致:
src/test/java/path/to/TestClass.groovy对应的包名应该是path.to - 测试类里有真正的测试方法:比如用JUnit的
@Test注解,或者如果是Spock框架的话,要有def开头的测试方法(没有测试方法的话,Surefire也会跳过)
4. 多模块项目的执行注意事项
如果是在根目录执行mvn test,要确保根pom的<modules>里包含了test-groups模块,否则Maven不会处理它:
<modules> <module>commons</module> <module>framework</module> <module>generatedsources1</module> <module>generatedsources2</module> <module>test-groups</module> </modules>
如果只想单独跑test-groups的测试,直接进入该目录执行mvn test,或者在根目录执行mvn -pl test-groups test(-pl指定要处理的模块)。
5. 用调试日志排查问题
如果上面的方法都没用,加个调试参数看看Surefire到底在干啥:
mvn test -X
在输出的日志里搜索surefire,看看它扫描了哪些目录,有没有找到你的Groovy测试类编译后的.class文件。如果没找到,那肯定是编译环节出问题了,回到第一步检查Groovy插件的配置。
按照这些步骤调整后,应该就能让Surefire正常执行你的Groovy测试了!
内容的提问来源于stack exchange,提问作者EJ-K

