今天接到一个任务,我们的某一个工程在打包的时候要进行测试(跑一些测试案例,如果案例不通过打包失败,为了防止改代码导致原本的一些案例不能正常运行了),我老老实实的写了测试类,如果案例不通过就抛异常。最后使用maven插件实现功能,插件配置如下:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>2.19</version> <dependencies> <dependency>
<!-- junit4.7及以上 --> <groupId>org.apache.maven.surefire</groupId> <artifactId>surefire-junit47</artifactId> <version>2.19</version> </dependency> </dependencies> <configuration> <includes> <!-- 测试中文案例-->
<include>**/CNTest.java</include> <!-- 测试英文案例-->
<include>**/EnTest.java</include> </includes> </configuration> </plugin>
我们支持两种环境,一种时中文环境,一种是英文环境,当我打包的时候,两个类都运行了,但是问题也随之出现,由于我们大量使用了静态属性,并且静态属性是根据语言环境来使用的不同的实现(老项目遗留问题),导致了运行CNTest时所有的类的静态属性都加载了中文对应的实现,而跑应为案例时,出现了大量的错误。原因在于maven跑的时候默认是不会重新加载类的,不像我们点击两次junit测试类。
后来翻阅了一些资料,查到了一个属性 reuseForks 该属性解释为 “表示一个测试进程执行完了之后是杀掉还是重用来继续执行后续的测试” 于是尝试在pom文件中加入:
<properties> <!-- 测试完一个类后杀掉进程,然后再测试另一个类 --> <reuseForks>false</reuseForks> </properties>
问题解决
参考资料:https://www.cnblogs.com/lvchengda/p/13048666.html