我在19篇生命周期讲过,当执行package或install的时候会自动执行测试,而测试周期的内置插件就是surefire。
pom.xml
-
<dependency>
-
<groupId>junit </groupId>
-
<artifactId>junit </artifactId>
-
<version>4.12 </version>
-
<scope>test </scope>
-
</dependency>
测试用例
surefire默认会执行src/test/java目录中符合以下命名规则的测试类。
**/Test*.java:所有以Test开头的类
**/*Test.java:所有以Test结尾的类
**/*TestCase.java:所有以TestCase结尾的类
如上图:我现在创建一个HelloTest,以Test结尾,会被surefire生命周期触发,代码如下
-
public class HelloTest {
-
-
ResourceBundle bundle;
-
-
//在测试之前执行一些初始化工作
-
-
public void before(){
-
bundle = ResourceBundle.getBundle( "config/application");
-
}
-
-
//测试方法,一个类中可以有多个测试方法
-
-
public void hello(){
-
Assert.assertEquals( "test",bundle.getString( "spring.profiles.active"));
-
}
-
-
//在测试之后执行
-
-
public void after(){
-
System.out.println( "end");
-
}
-
}
在@Before中初始化,获取以下properties文件
在@Test中,比较properties中的spring.profiles.active参数值是否是test,是则测试成功,不是则测试失败。
在16篇中讲过,一个项目可以有多个不同的环境,如果要把项目发布到测试服务器,需要先把开发环境改成测试环境。有时候会忘了改,这个用例的作用就是在发布前,检查properties参数配置是否是test环境,以防止将错误的环境打包发布。
执行测试
19篇讲过,在生命周期中,如果执行测试阶段之后的命令如package和install,会先自动执行surefire测试,如果测试成功,会顺利向后执行。如果测试不成功,程序会报错并终止执行。现在执行package命令。
以上是我的执行结果,在2.错误原因中可以看到,发布的预期值是test,但是我properties文件中的参数值实际是dev,说明环境配置是错的,不能发布。这个测试报告会保存到target\surefire-reports目录。
如上图,其中txt文件是文本格式的错误报告,xml文件则可以在eclipse中通过junit窗口打开查看错误报告
surefire插件常用配置
-
<plugin>
-
<groupId>org.apache.maven.plugins </groupId>
-
<artifactId>maven-surefire-plugin </artifactId>
-
<version>2.20 </version>
-
<configuration>
-
<!-- 改变测试用例的默认命名规则,只执行Test结尾的测试 -->
-
<includes>
-
<include>**/*Test.java </include>
-
</includes>
-
<!-- 排除测试用例,虽然以Test结尾,但是不会执行 -->
-
<excludes>
-
<exclude>hello/HelloTest.java </exclude>
-
</excludes>
-
<!-- 跳过生命周期的测试阶段 -->
-
<skip>true </skip>
-
</configuration>
-
</plugin>