Failures表示要测试的结果与预期值不一致;Errors表示测试代码或产品代码发生了未预期的错误;Skipped表示那些被标记为忽略的测试方法。在Junit中用户可以使用@Ignore注解标记忽略测试方法。

 

Maven本身不是一个单元测试框架。Maven所做的只是在构建执行到特定生命周期阶段的时候,通过插件来执行JUnit或TestNG的测试用例。Maven-surefire-plugin被称之为测试运行器(Test Runner)。它可以兼容JUnit3,JUnit4以及TestNG。

在默认情况下,maven-surefire-plugin的test目标会自动执行测试源码路径(src/test/java)下所有符合一组命名模式的测试类。这组模式为:

  **/Test*.java

  **/*Test.java

  **/*TestCase.java

只要将测试类按上述模式命名。Maven就能自动运行它们,用户不需要定义测试集合来聚合测试用例。以Tests结尾的测试是不会得以自动执行的。

maven-compiler-plugin的testCompile和maven-surefire-plugin的test目标都提供了一个参数skip用来跳过测试编译和测试运行。这个参数的命令行表达式为maven.test.skip

 

maven-surefire-plugin提供了一个test参数让Maven用户能够在命令行指定要运行的测试用例。

mvn test -Dtest=**Test  //指定运行**Test类

 

在POM中配置test运行的类

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.5</version>
    <configuration>
        <includes>
            <include>**/*Tests.java</include>
        </includes>
    </configuration>
</plugin>

在POM中配置不运行那些测试类

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.5</version>
    <configuration>
        <exclusions>
            <exclusion>**/*ServiceTest.java</exclusion>
        </exclusions>
    </configuration>
</plugin>

 

默认情况下,maven-surefire-plugin会在项目的target/surefire-reports目录下生成两种格式的错误报告:

  简单文本格式

  与JUnit兼容的XML格式

测试覆盖率是衡量项目代码质量的一个重要参考指标。Cobertura是一个开源的测试覆盖率统计工具。用户可以使用更简单的命令为Maven项目生成测试覆盖率报告。

mvn cobertura:cobertura

 

TestNG

<dependency>
    <groupId>org.testing</groupId>
    <artifactId>testing</artifactId>
    <version>5.9</version>
    <scope>test</scope>
    <classifier>jdk15</classifier>
</dependency>

TestNG允许用户使用一个名为testing.xml的文件来配置想要运行的测试集合。

<?xmlv version="1.0" encoding="UTF-8" ?>

<suite name="Suite1" verbose="1">
    <test name="Regression1">
        <classes>
            <class name="com.***.***.*Test" />
        </classes>
    </test>
</suite>

然后在maven-surefire-plugin中使用该testing

<plugin>
    <groupId>org.apache,maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifacId>
    <version>2.5</version>
    <configuration>
        <suiteXmlFiles>
            <suiteXmlFile>testing.xml</suiteXmlFile>
        </suiteXmlFiles>
    </configuration>
</plugin>

 

TestNG较JUnit的一大优势在于它支持测试组的概念。由于用户可以自由地标注方法所属的测试组,因此这种机制能让用户在方法级别对测试进行归类。JUnit只能实现类级别的测试归类。

@Test(groups={"util","medium"})  //将注解下的方法加入到两个测试组util和medium中

<plugin>
    <groupId>org.apache.maven.plugin</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <configuration>
        <groups>util,medium</groups>
    </configuration>
</plugin>

 

Maven配置打包测试类

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <version>2.2</version>
    <executions>
        <execution>
            <goals>
                <goal>test-jar</goal>
            </goals>
        </execution>
    </executions>
</plugin>

maven-jar-plugin有两个目标,分别是jar和test-jar。前横通过maven的内置绑定在default生命周期的package阶段运行,其行为就是对项目主代码进行打包,后者并没有内置绑定。因此需要显式声明该目标来打包测试代码。