Maven专题4——Maven测试

Java世界的主流测试框架是JUnit和TestNG,Maven在构建执行到特定生命周期阶段的时候,通过插件执行JUnit和TestNG的测试用例。

Maven执行测试的插件是maven-surefire-plugin,即测试运行器(Test Runner)。

1. maven-surefire-plugin

1.1 扫描规则

maven-surefire-plugin默认的在测试源码目录(src/test/java)扫描测试类的规则是:

  1. 任何以Test开头的类
  2. 任何以Test结尾的类
  3. 任何以TestCase结尾的类

1.2 包含和排除测试

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>x.x.x</version>
    <configuration>
        <includes>
            <include>**/*Tests</include> <!-- 包括所有以Tests为后缀的类 -->
        </includes>
        <excludes>
            <exclude>**/*TempDaoTests</exclude> <!-- 排除所有以TempDaoTests为后缀的类 -->
        </excludes>
    </configuration>
<plugin>

1.3 动态指定测试目标

# 动态指定执行YourTargetTests类的测试
mvn test -Dtest=YourTargetTests

# 动态指定执行以Your开头,以Tests结尾的所有测试类
mvn test -Dtest=Your*Tests

# 使用逗号分隔多个待执行的测试类
mvn test -Dtest=YourTargetTests,My*Test

1.4 跳过测试

1.4.1 Maven命令参数

  1. -DskipTests只跳过测试执行,不跳过测试编译;
  2. -Dmaven.test.skip=true同时跳过测试的运行和测试编译。
  3. -Dtest -DfailIfNoTests=false,不指定测试类,同时抑制没有测试类时的报错,相当于一种跳过测试的方法。

1.4.2 插件配置

  • 跳过测试执行阶段
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>x.x.x</version>
    <configuration>
        <skipTests>true<skipTests>
    </configuration>
<plugin>
  • 同时跳过测试编译和测试执行
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>x.x.x</version>
    <configuration>
        <skipTests>true<skipTests>
    </configuration>
<plugin>
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>x.x.x</version>
    <configuration>
        <skipTests>true<skipTests>
    </configuration>
<plugin>

1.5 测试报告

maven-surefire-plugin插件在项目的target/surefire-reports目录生成:

  • 简单文本报告(TXT)
  • 详细报告(XML)

1.5.1 简单文本格式

内容包括:

  • 总测试用例数
  • 失败个数(执行结果与预期不符)
  • 出错个数(执行过程中发生了非预期的异常)
  • 跳过个数
  • 执行测试总耗时

1.5.2 详细报告

Eclipse等IDE的JUnit插件,集成了可视化阅读详细报告XML文件的功能。

2. cobertura-maven-plugin与测试覆盖率报告。

2.1 常用命令

mvn cobertura:cobertura

2.2 覆盖率报告

覆盖率报告生成在项目的target/site/cobertura目录,点击其中的index.html即可查看所有的覆盖率信息。

3 maven-jar-plugin插件与测试代码重用

maven-jar-plugin插件有两个目标,分别是jartest-jar.

  • jar内置绑定在default生命周期的package阶段
  • test-jar没有内置绑定,如果开发者需要打包测试代码,需要显式绑定,一旦显式绑定,其默认的绑定生命周期阶段是package
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <version>x.x.x</version>
    <executions>
        <execution>
            <goals>
                <goal>test-jar</goal>
            <goals>    
        <execution>
    </executions>
<plugin>

这样,执行mvn package时就会将测试代码一同构建到目标Jar中,如果被打包的测试代码中提供了一些测试工具类,就可以供上层代码使用了。

原文地址:https://www.cnblogs.com/zyon/p/11240523.html