使用 Maven 进行测试

来源:互联网 发布:csol怒海狂鲨数据 编辑:程序博客网 时间:2024/06/05 04:37
  1. 安装和配置
  2. 坐标和依赖
  3. 仓库
  4. 生命周期和插件
  5. 聚合与继承
  6. 使用 Maven 进行测试
  7. 灵活的构建
  8. Archetype
  9. 附录

使用 Maven 进行测试

  1. maven-surefire-plugin

maven-surefire-plugin 称这为测试运行器(Test Runner),它能很好的兼容 JUnit3、JUnit4 以及 TestNG。maven-surefire-plugin 的 test 目标默认和 default 生命周期的 test 阶段绑定,这是一个内置的绑定。默认情况下 maven-surefire-plugin 的 test 目标会自动执行测试源路径(默认为 src/test/java/)下所有符合一组命名模式的测试类。这组模式为:

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

    1. 跳过测试

实际开发中有时候可能需要跳过测试,这很简单,在命令行加入参数 skipTests 就可以了。例如:

$ mvn package -DskipTests

当然还可以在 POM 中配置 maven-surefire-plugin 插件来提供该属性,如下:

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

但这是不推荐的做法,如果配置 POM 让项目长时间地跳过测试,那就失去测试代码的意义了。
有时候我们不仅仅想跳过测试运行,还想跳过测试代码的编译,Maven 也是允许你这么做的,如下 :

$ mvn package -Dmaven.test.skip=true

参数 maven.test.skip 同时控制了 maven-compiler-plugin 和 maven-surefire-plugin 两个插件的行为,测试代码编译跳过,测试运行也跳过了。当然 maven.test.skip 也可以在 POM 中配置,如下 :

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

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

  1. 动态指定要运行的测试用例

反复运行单个测试用例是日常开发中常见的行为。maven-surefire-plugin 提供了一个 test 参数让 Maven 用户能够在命令行指定要运行的测试用例。例如:

$ mvn test -Dtest=AppTest

这里的 test 参数的值是测试用例的类名,这行命令的效果就是只有 AppTest 这一个运行测试用例得到运行。当然 test 参数还支持高级一些的赋值方式,如下:

// 星号可以匹配堆个或多个字符,上述命令会运行项目中所有类名以 Test 结尾的测试类$ mvn test -Dtest=*Test// 该命令的 test 参数值是两上测试类名,它们之间用逗号隔开,其效果就是告诉 Maven  只运行这两个测试类$ mvn test -Dtest=AppTest,UserTest// 当然还可以结合星号和逗号使用如:$ mvn test -Dtest=AppTest,User*

test 参数的值必须匹配一个或者多个测试类,不然就会报错并导致构建失败,但是提供了一个参数 failifNoTests=false 让没有匹配到测试类也能顺利构建,其实这也是一种跳过测试的方法。可惜的是 maven-surefire-plugin 并没有提供作保参数支持我们从命令行跳过指定的测试类,好在我们还可以通过 在 POM 中配置 maven-surefire-plugin 排除特定的测试类。

  1. 包含与排除测试用例

Maven 提倡约定优于配置的原则,因此只要符合约定命名模式的测试类就会自动执行。即便如此,maven-surefire-plugin 还是允许用户通过额外的配置来自定义一些其它的测试类,或者排除一些符合默认命名模式的测试类。配置如下 :

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

上述代码中的 includes 元素用来指定那些不符合 Maven 默认命名模式的测试类,注意‘*.java*
后缀。excludes 元素用来指定那些符合 Maven 默认命名模式又不需要运行的测试类。

原创粉丝点击