第十章 使用Maven进行测试

1.  com.google.code.kaptcha:kaptcha 是一个用来生成验证码的开源类库。其项目主页为: http://code.google.com/p/kaptcha . Kaptcha 并没有上传到中央仓库,我们可以从 Sonatype Forge http://repository.sonatype.org/content/groups/forge/ )仓库获得该构件。

 

2.   Maven 本身并不是一个单元测试框架,它只是在构建执行到特定生命周期阶段的时候,通过插件来执行 JUnit 或者 TestNG 的测试用例。这一插件就是 maven-surefire-plugin ,可以称其为测试运行器( Test Runner ),它能很好地兼容 JUnit3 JUnit4 以及 TestNG

 

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

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

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

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

 

4.  可以设置 -DskipTetst 命令行参数跳过测试的执行,也可以在 POM 中配置如下信息:

 

<plugin>

  <groupId>org.apache.maven.plugins</groupId>

  <artifactId>maven-surefire-plugin</artifactId>

  <version>2.5</version>

  <configuration>

    <skipTests>true</skipTests>

  </configuration>

</plugin>
 

5.  可以设置 -Dmaven.test.skip=true 跳过测试代码的编译和执行,也可以在 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 testCompile maven-surefire.plugin test 都提供了一个参数 skip ,它的命令行表达式为 maven.test.skip

 

6.  maven-surefire.plugin 提供了一个 test 参数,让 Maven 用户可以只运行指定的测试用例, test 参数的值是想指定的测试用例的类名,同时该参数还支持多个值以及通配符 :

mvn test –Dtest=Random*Test,AccountCaptchaServiceTest 。如果指定的类名不存在,会导致构建失败,但可以通过 -DfailIfNoTests=false 来避免失败。

 

7.   除了默认命名的测试文件 Maven 可以在 POM 配置中指定想包含或者想排除的测试类:

<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> **/*ServiceTest.java</exclude>

      <exclude>**/TempDaoTest.java</exclude>

    </excludes>

  </configuration>

</plugin>
 

两个星号 ** 用来匹配任意路径,一个星号 * 匹配除路径分隔符外的 0 个或多个字符。

   

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

1)  简单文本格式

2)  JUnit 兼容的 XML 格式(是 Java 单元测试报告的事实标准,可以用 Eclipse JUnit 插件直接打开,也可以被 Hudsonw 使用。)

 

9.  Cobertura 是一个优秀的开源测试覆盖率统计工具( http://cobertura.sourceforge.net/ ), Maven 通过 cobertura-maven-plugin 与之集成,用户可以使用如下命令为 Maven 项目生成测试覆盖率报告:

$ mvn cobertura:cobertura

打开 target/site/cobertura/index.html 文件就能看到具体的报告。

 

10.  TestNG Java 社区中除 JUnit 之外另一个流行的单元测试框架( http://testng.org )。使用 Maven 运行 TestNG 时,首先需要删除 POM 中的 JUnit 依赖,加入 TestNG 依赖:

<dependency>

  <groupId>org.testng</groupId>

  <artifactId>testing</artifactId>

  <version>5.9</version>

  <scope>test</scope>

  <classifier>jdk15</classifier>

</dependency>

 

  TestNG 使用 classifier jdk15 jdk14 为不同 Java 平台提供支持。

 

11.  JUnit TestNG 的常用类库对应关系:

JUnit

TestNG

作用

org.junit.Test

org.testng.annotations.Test

标注方法为测试方法

org.junit.Assert

org.testng.Assert

检查测试结果

org.junit.Before

org.testng.annotations.BeforeMethod

标方法在每个测试方法之前运行

org.junit.After

org.testng.annotations.AfterMethod

标方法在每个测试方法之后运行

org.junit.BeforeClass

org.testng.annotations.BeforeClass

标方法在所有测试方法之前运行

org.junit.AfterClass

org.testng.annotations.AfterClass

标方法在所有测试方法之后运行

 

 

12.  可以在项目根目录下定义如下 testng.xml 文件来配置测试类的集合:

<?xml version=”1.0” encoding=”UTF-8” ?>

<suite name=”Suite1” verbose=”1” >

  <test name=”Regression1” >

    <classes>

      <class name=”com.juvenxu.mvnbook.account.captcha.RandomGeneratorTest” />

    </classes>

  </test>

</suite>

 

  同时再配置 maven-surefire-plugin 使用该 testng.xml

<plugin>

  <groupId>org.apache.maven.plugins</groupId>

  <artifactId>maven-surefire-plugin</artifactId>

  <version>2.5</version>

  <configuration>

    <suiteXmlFiles>

      <suiteXmlFile>testing.xml</suiteXmlFile>

    </suiteXmlFiles>

  </configuration>

</plugin>
 

 

13.  TestNG 支持测试组的概念,能让用户在方法级别对测试进行归类:( JUnit 只能支持类级别的测试归类)

@Test ( groups = { “util”, “medium”} )

   Maven 用户可以配置运行一个或者多个 TestNG 测试组:

<plugin>

  <groupId>org.apache.maven.plugins</groupId>

  <artifactId>maven-surefire-plugin</artifactId>

  <version>2.5</version>

  <configuration>

    <suiteXmlFiles>

      <groups>util,medium</groups>

    </suiteXmlFiles>

  </configuration>

</plugin>
 

 

14.  Maven 用户可以通过配置 maven-jar-plugin 将测试类打包,从而可以让别的项目重用测试代码:

 

<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 有两个目标,分别是 test test-jar ,前者通过 Maven 的内置绑定在 default 生命周期的 package 阶段运行,作用是对项目主代码进行打包,而后者没有内置绑定,其默认绑定生命周期阶段为 package

在声明一个测试包构件依赖时, type 元素的值需要设定为 test-jar

 

<dependency>

  <groupId>com.juvenxu.mvnbook.account</groupId>

  <artifactId>account-captcha</artifactId>

  <version>1.0.0-SNAPSHOT</version>

  <type>test-jar</type>

  <scope>test</scope>

</dependency>

你可能感兴趣的:(maven,Build,TestNG)