今天遇见了一个奇怪的问题,在 IDE 中 run unit test,全部 cases 都成功了,但是后来通过 mvn test 运行 case 确保错了。在寻求原因的同时也找到了对应的解决方法。
差异 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 一次脚本。
org.apache.maven.plugins
maven-surefire-plugin
2.12
always
重点加入 configureation 的配置部分
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/