zoukankan      html  css  js  c++  java
  • Maven 学习总结 (四)之 测试

    使用Maven测试

      Maven的重要职责之一就是自动运行单元测试。它通过maven-surefire-plugin与主流的单元测试框架JUnit3、JUnit4以及TestNG集成,并且能够自动生成丰富的结果报告。

      Maven所作的只是在构建执行到特定生命周期阶段的时候,通过插件来执行JUnit或者TestNG的测试用例。这一插件就是maven-surefire-plugin,

    可以称之为测试运行器(Test Runner),他能很好地兼容JUnit3、JUnit4以及TestNG。

      default生命周期,其中test阶段被定义为“使用单元测试框架运行测试”,test阶段正式与mavne-surefire-plugin的test目标相绑定了,这是一个内置的绑定。

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

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

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

      **/*TestCase.java:任何子目录下所有已TestCase结尾的Java类。  

      只要将测试类按上述模式命名,Maven就能自动运行他们,用户也就不需要定义测试集合(TestSuite)来聚合测试用例(TestCase)。

    关于模式要注意的是,以Tests结尾的测试类是不会得以自动执行的。为了能够运行测试,Maven需要在项目中引入测试框架的依赖。

    跳过测试在Maven跳过测试,需在命令行加入参数skipTests就可以了。

      mvn package-DskipTests

      Maven输出会告诉你它跳过了测试:

      

      在POM中配置maven-surefire-plugin插件来提供该属性,但不推荐这个做法,如果配置POM让项目长时间跳过测试,测试代码变得没有意义。

       

      跳过测试运行和测试代码的编译(不推荐)

      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-surefire-plugin提供了一个test参数让maven用户能够在命令行指定要运行的测试用例

      mvn test-Dtest=RandomGeneratorTest

      这里test参数的值是测试用例的类名

      mvn test -Dtest=Random*Test

      匹配零个或者多个字符,上述命令运行项目中所有类名以Random开头、Test结尾的测试类。

      mvn test-Dtest=RandomGeneratorTest, AccountCapchaServiceTest

      该test参数值是零个测试参数值是两个测试类名,他们之间用逗号分隔开,其效果就是告诉maven只运行这两个测试类。也可以结合使用星号和逗号。

      需要注意的是,上述几种从命令行动态指定测试类的方法都应该只是临时使用,如果长时间只运行项目的某几个测试,那么测试就会慢慢失去其本来的意义。

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

     包含与排除测试用例

      Maven提倡约定由于配置原则,因此用户应该尽量遵守这一组模式来为测试类命名。即便如此,maven-surefire-plugin还是允许用户通过额外的配置来自定义

    包含一些其他测试类,或者排除一些符合默认命名模式的测试类。

    使用了**/*Test.java来匹配所有以Tests结尾的Java类,两个星号**用来匹配任意路径,一个星号*匹配除路径分割符外的0个或者多个字符。

      

     使用exludes元素排除一些符合默认命名规则命名模式的测试类。

    测试报告

      除了命令行输出,maven用户可以使用maven-surefire-plugin等插件以文件的形式生成更丰富的测试报告

    基本的测试报告

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

      ->简单文本格式

      ->与JUnit兼容的xml格式

     测试覆盖率报告

      测试覆盖率是衡量项目代码质量的一个重要的参考指标,Cobertura是一个优秀的开源测试覆盖率统计工具,maven通过cobertura-mavne-plugin与之集成,

    用户可以使用简单的命令为Maven项目生成测试覆盖率报告:mvn cobertura:cobertura

      接着打开项目目录target/site/cobertura/下的index.html文件,就能看到如图所示的测试覆盖率报告。

      

    单击具体的类,还能看到精确到行的覆盖率报告

           

  • 相关阅读:
    lesson
    lesson
    课后习题-5
    lesson
    lesson
    lesson
    重启网络服务时 Bringing up interface eth0
    课后习题-4
    基础扩展
    课后习题-3
  • 原文地址:https://www.cnblogs.com/jixp/p/10469383.html
Copyright © 2011-2022 走看看