Maven插件学习(二)——测试插件maven-surefire-pluigin

1、插件简介

maven-surefire-plugin测试运行器,能很好的兼容JUnit3Junit4以及TestNG,Maven在构件执行到特定生命周期阶段的时候,通过该插件来执行JUnit或者TestNG的测试用例,test阶段与该插件的test目标相绑定,是Maven内置的绑定,默认情况test目标会自动执行测试源码路径下所有符合一组命名模式的测试类。这组模式为:

**/Test*.java:任何子目录下所有命名以Test开头的Java类。

**/*Test.java:任何子目录下所有命名以Test结尾的Java类。

**/*TestCase.java:任何子目录下所有命名以TestCase结尾的Java类

只要将测试类按上述模式命名,Maven就能自动运行他们,用户也就不在需要定义测试集合(TestSuite)来聚合测试用例(TestCase)。关于模式需要注意的是,以Tests结尾的测试类是不会得以自动执行的。

2、跳过测试

命令行配置 mvn package -DskipTests 跳过测试执行。

POM文件配置skipTests属性

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifaceId>maven-surefire-plugin</artifactId>
    <version>2.5</version>
    <configuration>
        <skipTests>true</skipTests>
    </configuration>
<plugin/>

跳过测试代码的编译

mvn package -Dmaven.test.skip=true

参数maven.test.skip同时控制了maven-compile-plugin和maven-surefire-plugin两个插件的行为,测试代码编译跳过了,测试运行也跳过了。

POM中配置maven.test.skip

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

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifaceId>maven-compile-pluigin</artifactId>
    <version>2.1</version>
    <configuration>
        <skip>true</skip>
    </configuration>
<plugin/>
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifaceId>maven-surefire-plugin</artifactId>
    <version>2.5</version>
    <configuration>
        <skip>true</skip>
    </configuration>
<plugin/>

3、命令行动态指定要运行的测试用例

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

mvn test -Dtest=RandomGeneratorTest 指定运行某个测试用例

mvn test -Dtest=Random*Test 星号可以匹配零个或多个字符,运行项目中所有类名以Random开头、Test结尾的测试类。

mvn test -Dtest=RandomGeneratorTest,AccountCaptchaServiceTest 用逗号隔开测试类,只运行逗号隔开的多个测试类

mvn test -Dtest=Random*Test,AccountCaptchaServiceTest 结合使用星号和逗号。

test参数的值必须匹配一个或者多个测试类,如果maven-surefire-plugin找不到任何匹配的测试类,就会报错并导致构建失败。

mvn test -Dtest -DfailIfNoTests=false 即使没有任何测试也不要报错

-Dtest -DfailIfNoTests=false 命令行中使用这种方法也可以跳过测试

maven-surefire-plugin并没有提供任何参数支持用户从命令行跳过指定的测试类,可以在POM中配置maven-surefire-plugin排除特定的测试类。

4、POM中指定、排除指定的测试类

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifaceId>maven-surefire-plugin</artifactId>
    <version>2.5</version>
    <configuration>
        <includes>
            ...
            <!-- 匹配所有以Tests结尾的Java类,两个星号**用来匹配任意路径,一个星号*匹配除路径风格符外的0个或多个字符 -->
            <include>**/*Tests.java</include>
        </includes>
        <excludes>
            ...
            <!-- 排除所有以ServiceTest结尾的测试类,以及一个名为TempDaoTest的测试类,
                他们都符合默认的命名模式**/*Test.java,有了excludes配置后,maven-surefire-plugin将不再自动运行他们 -->
            <exclude>**/*ServiceTest.java</exclude>
            <exclude>**/TempDaoTest.java</exclude>
        </excludes>
    </configuration>
<plugin/>

5、测试报告

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

简单文本格式

与JUnit兼容的XML格式(XML格式已经成为Java单元测试报告的事实标准,其他工具也能使用它们;eg:hudson),Eclipse JUnit插件可以打开XML格式报告

Cobertura是一个优秀的开源测试覆盖率统计工具,Maven通过cobertura-maven-plugin与之集成,

mvn cobertura:cobertura

target/site/cobertura/ 下的index.html文件就是生成的测试覆盖率报告。

6、打包测试代码

maven-jar-plugin打包测试类,jar内置绑定在default生命周期的package生命周期的package阶段运行,其行为就是对项目主代码进行打包,test-jar没有内置绑定,test-jar默认绑定生命周期阶段为package,所以需要显示声明该目标来打包测试代码。

插件目标没有内置绑定的,默认绑定到生命周期中的阶段,调用需要显示声明目标

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

依赖测试包构件,type元素声明所有测试包构件都使用特殊的 test-jar 打包类型。需要注意的是,这一类型的依赖同样都使用test依赖范围。

<dependency>
    <groupId>com.**.account</groupId>
    <artifaceId>account-captcha</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <type>test-jar</type>
    <scope>test</scope>
</dependency>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

螺旋小蜗

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值