`

Maven实战(十):使用Maven进行测试

阅读更多

surefire插件:http://maven.apache.org/surefire/maven-surefire-plugin/

 本文引自:http://blog.csdn.net/sin90lzc/article/details/7543262

1.maven-surefire-plugin简介

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

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

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

2.跳过测试

要想跳过测试,在命令行加入参数skipTests就可以了。如:
mvn package -DskipTests
mvn install -DskipTests 
 也可以在pom配置中提供该属性。
<plugin>  
    <groupId>org.apache.maven.plugins</groupId>  
    <artifactId>maven-surefire-plugin</artifactId>  
    <version>2.5</version>  
    <configuration>  
        <skipTests>true</skipTests>  
    </configuration>  
</plugin> 
 有时候可能不仅仅需要跳过测试运行,还要跳过测试代码的编译:
mvn package -Dmaven.test.skip=true 
 也可以在pom中配置maven.test.skip(不推荐):
    <plugin>  
        <groupId>org.apache.maven.plugin</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>  
 

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

maven-surefire-plugin提供了一个test参数让Maven用户能够在命令行指定要运行的测试用例。如:
mvn test -Dtest=RandomGeneratorTest  
 也可以使用通配符:
mvn test -Dtest=Random*Test
 或者也可以使用“,”号指定多个测试类:
mvn test -Dtest=Random*Test,AccountCaptchaServiceTest  
 如果没有指定测试类,那么会报错并导致构建失败。
mvn test -Dtest 
 这时候可以添加-DfailIfNoTests=false参数告诉maven-surefire-plugin即使没有任何测试也不要报错。
mvn test -Dtest -DfailIfNoTests=false  
 由此可见,命令行参数-Dtest -DfailIfNoTests=false是另外一种路过测试的方法
 

4.包含与排除测试用例

如果由于历史原因,测试类不符合默认的三种命名模式,可以通过pom.xml设置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>**/*ServiceTest.java</exclude>  
                <exclude>**/TempDaoTest.java</exclude>  
            </excludes>  
        </configuration>  
    </plugin>  
 

5.生成测试报告

5.1基本测试报告

默认情况下,maven-surefire-plugin会在项目的target/surefire-reports目录下生成两种格式的错误报告。
  • 简单文本格式——内容十分简单,可以看出哪个测试项出错。
  • 与JUnit兼容的XML格式——XML格式已经成为了Java单元测试报告的事实标准,这个文件可以用其他的工具如IDE来查看。

5.2测试覆盖率报告

测试覆盖率是衡量项目代码质量的一个重要的参考指标。Cobertura是一个优秀的开源测试覆盖率统计工具(详见 http://cobertura.sourceforge.net/),Maven通过cobertura-maven-plugin与之集成,用户可 以使用简单的命令为Maven项目生成测试覆盖率报告。运行下面命令生成报告:
mvn cobertura:cobertura
 

6.运行TestNG测试

TestNG是Java社区中除了JUnit之外另一个流行的单元测试框架。TestNG在JUnit的基础上增加了很多特性,其站点是http://testng.org/ .添加TestNG依赖:
<dependency>  
    <groupId>org.testng</groupId>  
    <artifactId>testng</artifactId>  
    <version>5.9</version>  
    <scope>test</scope>  
</dependency> 
 下面是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 标注方法在所有测试方法之后运行
TestNG允许用户使用一个名为testng.xml的文件来配置想要运行的测试集合。如在类路径上添加testng.xml文件,配置只运行RandomGeneratorTest
    <?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>testng.xml</suiteXmlFile>  
            </suiteXmlFiles>  
        </configuration>  
    </plugin>  
 TestNG较JUnit的一大优势在于它支持测试组的概念。如可以在方法级别声明测试组:
@Test(groups={"util","medium"})  
 然后可以在pom中配置运行一个或多个测试组:
<plugin>  
    <groupId>org.apache.maven.plugins</groupId>  
    <artifactId>maven-surefire-plugin</artifactId>  
    <version>2.5</version>  
    <configuration>  
        <groups>util,medium</groups>  
    </configuration>  
</plugin> 
 

7.重用测试代码

当命令行运行mvn package的时候,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有两个目标,分别为jar和test-jar。这两个目标都默认绑定到default生命周期的package阶段运行,只是test-jar并没有在超级POM中配置,因此需要我们另外在pom中配置。
 
现在如要引用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 实战(中文pdf)

    《Maven实战》不仅覆盖了Maven的基础知识,还深入到高级特性和最佳实践,如使用 profiles 进行条件构建,或者处理复杂的多模块项目。对于初学者,书中提供的实例和实战经验可以帮助快速上手;对于经验丰富的开发者,...

    Maven 实战源码

    《Maven实战源码》是一本专为Java开发者设计的指南,旨在帮助初学者和有经验的开发者深入理解和掌握Maven这一强大的项目管理和构建工具。Maven不仅简化了项目的构建过程,还通过依赖管理和插件机制,使得软件开发...

    Maven3实战笔记04Maven的生命周期和插件

    - **test**:使用适当的单元测试框架运行测试。这些测试不会被打包或部署。 - **package**:将已编译的类文件打包成可发布的格式,例如JAR、WAR等。 - **integration-test**:处理和集成测试相关的事务。 - **verify...

    Maven实战 Maven实战Maven实战

    ### Maven实战:Maven的安装、配置及使用入门 #### Maven概述 Maven是一款流行的Java项目管理和理解工具,由Sonatype公司支持,并广泛应用于Java项目的构建、依赖管理和文档生成等领域。Maven通过一种约定优于配置...

    maven 实战 所有源代码

    ** Maven实战:所有源代码详解 ** Maven是一款强大的项目管理和构建工具,广泛应用于Java开发领域。它通过一套约定优于配置的原则,简化了项目的构建、依赖管理以及文档生成等工作。本篇文章将深入探讨"Maven实战...

    《Maven实战》源代码

    - 使用Junit进行单元测试 - 跳过测试的选项(`-DskipTests`) 3. **ch-7**: 集成部署与发布 - 部署到本地和远程仓库 - 使用`mvn deploy`命令发布项目 - 配置settings.xml文件以连接不同的Maven仓库 - Nexus或...

    Maven 实战.pdf-完整版

    它还包含了如何使用Maven进行单元测试和集成测试,使用Hudson(后来被Jenkins替代)等工具实现持续集成,以及如何利用Maven构建Web应用等高级知识。 在版本管理方面,书中阐述了如何使用Maven进行版本控制,这对于...

    Maven实战(包括安装、配置及使用)

    ### Maven实战知识点详解 #### 一、Maven概述与价值 **Maven**是一种自动化的构建工具,主要用于Java项目的构建和依赖管理。它通过一种项目对象模型(Project Object Model,简称POM)来管理项目的构建过程,使得...

    Maven实战Maven教程

    ### Maven实战Maven教程:深度解析与应用指南 #### Maven:构建工具的革命者 Maven,作为一款功能强大的自动化构建工具,自2007年以来,在Java开发领域引发了深远的影响。其设计理念围绕着项目对象模型(Project ...

    《Maven实战》

    ### Maven实战:全面掌握Maven的核心技能 #### Maven简介与重要性 Apache Maven是一个项目管理和理解工具,主要用于Java项目的构建、依赖管理和项目信息管理。它通过一个项目对象模型(POM)来管理项目的构建、...

    Maven《实战》许晓斌完整版包含源码

    许晓斌的《Maven实战》是针对Maven深入学习的一本优秀教材,涵盖了从基础到高级的全方位内容,旨在帮助开发者高效利用Maven进行项目管理。 本书分为十八个章节,逐步深入地讲解了Maven的核心概念和实际应用。以下是...

    maven笔记:maven-overlay-实战笔记

    在描述中提到的博客链接,虽然无法直接访问,但根据常见的 Maven overlay 实战场景,我们可以推断博主可能分享了如何设置和使用 Maven overlay 来合并多个 Web 项目的资源,如 JSP 页面、CSS、JavaScript 文件等,以...

    Maven3实战笔记.pdf

    6. Maven插件的使用:插件是Maven能够执行各种不同任务的关键,文档可能介绍了如何配置和使用各种Maven插件,例如构建插件、编译插件、测试插件等。 7. 多模块项目的构建:Maven3支持复杂项目结构的模块化构建,...

    Maven实战.pdf

    - **运行测试**:使用`mvn test`命令。 - **打包项目**:使用`mvn package`命令。 - **部署项目**:使用`mvn deploy`命令。 3. **管理依赖**:在pom.xml文件中添加依赖项,Maven会自动下载并管理这些依赖。 ```...

    精通Maven依赖冲突:策略、工具与实战技巧

    它提倡"约定优于配置"(Convention Over Configuration)的原则,对项目的目录结构、测试用例命名方式等内容都做了规定,使用Maven管理的项目都必须遵守这些规则。 Maven具有以下特点: 1. 设置简单。 2. 所有项目...

Global site tag (gtag.js) - Google Analytics