Junit 执行单元测试用例成功,mvn test 却失败的问题和解决方法

今天遇见了一个奇怪的问题,在 IDE 中 run unit test,全部 cases 都成功了,但是后来通过 mvn test 运行 case 确保错了。在寻求原因的同时也找到了对应的解决方法。

Run Unit Test 和 Maven test 的区别

差异 1:在 IDE 中通过选中单元测试路径,点击右键选择 run test 和点击 maven 中的 test 是有区别的。在 Maven 执行测试的过程中,是不允许测试 cases 访问其他项目的测试类和其他项目的 resources 下文件的。也就是说,在 a/src/test/java 下的测试用例,是不能引用 b/src/test/java 中的类的,同时也不允许访问 b/src/test/resources 下的资源的。但是在 IDE 中的 Run Unit Test 几乎是没有这样的限制的。

差异 2:Maven 强制要求 src/test/java 下不能存在 resource 的文件,必须放到 src/test/reources 文件夹下,但是 IDE 却很少有对应的约束。

这些约束就是导致 IDE 下 Run Unit Test 是成功的,但是在 Maven 中失败的原因。

因此测者提醒,提交单元测试代码之前,一定要在本地 mvn test 一次脚本。

解决的办法

在 maven 插件配置:(surefire2.14 以下版本)


org.apache.maven.plugins
maven-surefire-plugin
2.12

always

重点加入 configureation 的配置部分

在 maven 插件配置:(surefire2.14 及其以上版本)


org.apache.maven.plugins
maven-surefire-plugin
2.19.1

false
1

在 2.14 以上的版本中,forkMode 配置项已经废弃了。

另一个可能有效的方法

有时候在 webapp 项目中进行测试的时候,需要 WEB-INF 文件夹放在 Class Path 中,配置如下:


org.apache.maven.plugins
maven-surefire-plugin
2.19.1

false
1
-Xmx1024m -XX:MaxPermSize=256m -Dfile.encoding=UTF-8 -Xverify:none

${basedir}/src/main/webapp/‌​WEB-INF/


关注测者,关注测试


↙↙↙阅读原文可查看相关链接,并与作者交流