`

maven install时自动执行单元测试

 
阅读更多

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就可以了。如:
Plain代码
  1. mvn package -DskipTests  

也可以在pom配置中提供该属性。
Html代码
  1. < plugin >   
  2.     < groupId > org.apache.maven.plugins </ groupId >   
  3.     < artifactId > maven-surefire-plugin </ artifactId >   
  4.     < version > 2.5 </ version >   
  5.     < configuration >   
  6.         < skipTests > true </ skipTests >   
  7.     </ configuration >   
  8. </ plugin >   

有时候可能不仅仅需要跳过测试运行,还要跳过测试代码的编译:
Plain代码
  1. mvn package -Dmaven.test.skip=true  

也可以在pom中配置maven.test.skip:
Html代码
  1. < plugin >   
  2.     < groupId > org.apache.maven.plugin </ groupId >   
  3.     < artifactId > maven-compiler-plugin </ artifactId >   
  4.     < version > 2.1 </ version >   
  5.     < configuration >   
  6.         < skip > true </ skip >   
  7.     </ configuration >   
  8. </ plugin >   
  9. < plugin >   
  10.     < groupId > org.apache.maven.plugins </ groupId >   
  11.     < artifactId > maven-surefire-plugin </ artifactId >   
  12.     < version > 2.5 </ version >   
  13.     < configuration >   
  14.         < skip > true </ skip >   
  15.     </ configuration >   
  16. </ plugin >   

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

maven-surefire-plugin提供了一个test参数让Maven用户能够在命令行指定要运行的测试用例。如:
Plain代码
  1. mvn test -Dtest=RandomGeneratorTest  

也可以使用通配符:
Plain代码
  1. mvn test -Dtest=Random*Test  

或者也可以使用“,”号指定多个测试类:
Plain代码
  1. mvn test -Dtest=Random*Test,AccountCaptchaServiceTest  

如果没有指定测试类,那么会报错并导致构建失败。
Plain代码
  1. mvn test -Dtest  

这时候可以添加-DfailIfNoTests=false参数告诉maven-surefire-plugin即使没有任何测试也不要报错。
Plain代码
  1. mvn test -Dtest -DfailIfNoTests=false  

由此可见,命令行参数-Dtest -DfailIfNoTests=false是另外一种路过测试的方法

4.包含与排除测试用例

如果由于历史原因,测试类不符合默认的三种命名模式,可以通过pom.xml设置maven-surefire-plugin插件添加命名模式或排除一些命名模式。
Html代码
  1. < plugin >   
  2.     < groupId > org.apache.maven.plugins </ groupId >   
  3.     < artifactId > maven-surefire-plugin </ artifactId >   
  4.     < version > 2.5 </ version >   
  5.     < configuration >   
  6.         < includes >   
  7.             < include > **/*Tests.java </ include >   
  8.         </ includes >   
  9.         < excludes >   
  10.             < exclude > **/*ServiceTest.java </ exclude >   
  11.             < exclude > **/TempDaoTest.java </ exclude >   
  12.         </ excludes >   
  13.     </ configuration >   
  14. </ 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项目生成测试覆盖率报告。运行下面命令生成报告:
Plain代码
  1. mvn cobertura:cobertura  

6.运行TestNG测试

TestNG是Java社区中除了JUnit之外另一个流行的单元测试框架。TestNG在JUnit的基础上增加了很多特性,其站点是http://testng.org/ .添加TestNG依赖:
Html代码
  1. < dependency >   
  2.     < groupId > org.testng </ groupId >   
  3.     < artifactId > testng </ artifactId >   
  4.     < version > 5.9 </ version >   
  5.     < scope > test </ scope >   
  6.     < classifier > jdk15 </ classifier >   
  7. </ 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
Html代码
  1. <? xml   version = "1.0"   encoding = "UTF-8" ?>   
  2. < suite   name = "Suite1"   verbose = "1" >   
  3.     < test   name = "Regression1" >   
  4.         < classes >   
  5.             < class   name = "com.juvenxu.mvnbook.account.captcha.RandomGeneratorTest"   />   
  6.         </ classes >   
  7.     </ test >   
  8. </ suite >   

同时再配置maven-surefire-plugin使用该testng.xml,如:
Html代码
  1. < plugin >   
  2.     < groupId > org.apache.maven.plugins </ groupId >   
  3.     < artifactId > maven-surefire-plugin </ artifactId >   
  4.     < version > 2.5 </ version >   
  5.     < configuration >   
  6.         < suiteXmlFiles >   
  7.             < suiteXmlFile > testng.xml </ suiteXmlFile >   
  8.         </ suiteXmlFiles >   
  9.     </ configuration >   
  10. </ plugin >   

TestNG较JUnit的一大优势在于它支持测试组的概念。如可以在方法级别声明测试组:
Java代码
  1. @Test (groups={ "util" , "medium" })  

然后可以在pom中配置运行一个或多个测试组:
Html代码
  1. < plugin >   
  2.     < groupId > org.apache.maven.plugins </ groupId >   
  3.     < artifactId > maven-surefire-plugin </ artifactId >   
  4.     < version > 2.5 </ version >   
  5.     < configuration >   
  6.         < groups > util,medium </ groups >   
  7.     </ configuration >   
  8. </ plugin >   

7.重用测试代码

当命令行运行mvn package的时候,Maven只会打包主代码及资源文件,并不会对测试代码打包。如果测试代码中有需要重用的代码,这时候就需要对测试代码打包了。
这时候需要配置maven-jar-plugin将测试类打包,如:
Html代码
  1. < plugin >   
  2.     < groupId > org.apache.maven.plugins </ groupId >   
  3.     < artifactId > maven-jar-plugin </ artifactId >   
  4.     < version > 2.2 </ version >   
  5.     < executions >   
  6.         < execution >   
  7.             < goals >   
  8.                 < goal > test-jar </ goal >   
  9.             </ goals >   
  10.         </ execution >   
  11.     </ executions >   
  12. </ plugin >   
maven-jar-plugin有两个目标,分别为jar和test-jar。这两个目标都默认绑定到default生命周期的package阶段运行,只是test-jar并没有在超级POM中配置,因此需要我们另外在pom中配置。

现在如要引用test-jar生成的测试代码包,可以如下配置:
Html代码
  1. < dependency >   
  2.     < groupId > com.juvenxu.mvnbook.account </ groupId >   
  3.     < artifactId > account-captcha </ artifactId >   
  4.     < version > 1.0.0-SNAPSHOT </ version >   
  5.     < type > test-jar </ type >   
  6.     < scope > test </ scope >   
  7. </ dependency >  
分享到:
评论

相关推荐

    Maven2 的新特性.7z

    • test,只在测试时使用,用于编译和运行测试代码。不会随项目发布。 • system,类似provided,需要显式提供包含依赖的jar,Maven不会在Repository中查找它。 的使用举例: &lt;groupId&gt;hibernate &lt;artifactId&gt;...

    maven的优缺点 项目

    在运行的(install)跳过,运行的时候会执行一遍测试类(花的时间长) 4.创建一个标准的ssm项目 项目介绍: Ssm:项目的顶级目录 ssm_common:jar包,放的是原来src_common下面的代码 ssm_service:pom,文件夹,放了api和impl...

    maven笔记.docx

    Maven根据这些信息自动执行构建任务,如编译、测试、打包和部署。 依赖管理: Maven的依赖管理功能能够自动下载、安装和管理项目所需的依赖库。通过在POM中指定依赖项的坐标,Maven可以自动解析依赖关系,并从中央...

    GruntJs:Grunt----基于Node.js的自动化构建工具

    GruntJsGruntJs----基于Node.js的自动化构建工具环境搭建:...###Java领域:1.Unit做单元测试2.Maven自动化单元测试,统一项目管理,构建项目原型模板,包依赖管理。###CSScomb配置###CSSLint Options###JSHint O

    Maven项目的构建与管理

    Maven项目构建过程如上图所示,主要构建命令有几种:mvnvalidate验证,验证项目是正确的并且所有的信息是可用的;mvnclean清理,清理项目缓存输出,...执行后面的命令会自动执行前面的命令,比如执行mvnpackage时会执

    Xeneta:自动化测试Cucumber项目

    塞内塔自动化测试Cucumber项目使用的设置:1.Eclipse IDE 2.Java 8 3.Selenium 4.Maven 5.Cucumber BDD Gherkins 先决条件:Java已安装在系统中,并且路径是在环境变量中设置的。 安装:1.从git下载项目。 2.使用...

    sunshine:Sunshine允许您直接从Java代码管理自动化测试的套件

    发展笔记如果您将安装并通过CLI使用Git,则所有必需的工作流程将自动执行。 否则,您可以通过运行./workflows脚本手动进行操作。代码格式我们使用格式化代码。 请运行./gradlew spotlessApply手动调用格式。代码评估...

    bigpetstore-location-sampler:美国邮政编码的数据库,其中包含GPS坐标,中位数家庭收入和人口

    Building将自动运行包含的单元测试。 如果您只想运行单元测试,可以通过以下方法进行: $ gradle test 要清理构建文件,请运行: $ gradle clean 要将jar安装到本地Maven存储库中: $ gradle install

    bigpetstore-product-sampler:产生宠物用品的图书馆

    Building将自动运行包含的单元测试。 如果您只想运行单元测试,可以通过以下方法进行: $ gradle test 要清理构建文件,请运行: $ gradle clean 要将jar安装到本地Maven存储库中: $ gradle install

    bigpetstore-name-sampler:用于生成名称的库

    BigPetStore名称采样器通过从本身基于美国人口普查... 如果您只想运行单元测试,可以通过以下方法进行: $ gradle test 要清理构建文件,请运行: $ gradle clean 要将jar安装到本地Maven存储库中: $ gradle install

    2021-02-teamc

    Worblehat Worblehat是举办的培训的培训应用程序。...运行测试 所有测试都通过JUnit执行,但是可以在概念上分为单元测试和集成测试。 它们绑定到不同的Maven生命周期阶段,由不同的Maven插件执行,并遵循不同的命名

    基于SSM框架演唱会网上订票系统+源代码+文档说明

    maven install命令,然后运行;\ 3. 将项目中springmvc-servlet.xml配置文件中的数据库配置改为自己的配置;\ 4. 运行项目,在浏览器中输入http://localhost:8080/ 登录 # 高清视频演示 -------- 该资源内项目源码...

    2021-04-teama

    Worblehat Worblehat是基于Java Spring-Boot的案例研究,该案例研究是由举办的“培训”。...运行测试 所有测试都通过JUnit执行,但是可以在概念上分为单元测试和集成测试。 它们绑定到不同的Maven生命周

    Java基于SpringBoot+MyBatis新闻推荐系统.zip

    要完成安装,首先使用brew tap pivotal / tap切换到pivotal存储库,然后执行brew install springboot命令。Spring Boot是Pivotal团队的一个新框架,旨在简化新Spring应用程序的初始设置和开发。该框架使用...

    Java基于SpringBoot+MyBatis校园资料分享平台.zip

    要完成安装,首先使用brew tap pivotal / tap切换到pivotal存储库,然后执行brew install springboot命令。Spring Boot是Pivotal团队的一个新框架,旨在简化新Spring应用程序的初始设置和开发。该框架使用...

    Java基于SpringBoot+MyBatis小徐影城管理系统.zip

    要完成安装,首先使用brew tap pivotal / tap切换到pivotal存储库,然后执行brew install springboot命令。Spring Boot是Pivotal团队的一个新框架,旨在简化新Spring应用程序的初始设置和开发。该框架使用...

    Java基于SpringBoot+MyBatis房产销售系统.zip

    要完成安装,首先使用brew tap pivotal / tap切换到pivotal存储库,然后执行brew install springboot命令。Spring Boot是Pivotal团队的一个新框架,旨在简化新Spring应用程序的初始设置和开发。该框架使用...

    Java基于SpringBoot+MyBatis基于SpringBoot的在线文档管理系统的设计与实现.zip

    要完成安装,首先使用brew tap pivotal / tap切换到pivotal存储库,然后执行brew install springboot命令。Spring Boot是Pivotal团队的一个新框架,旨在简化新Spring应用程序的初始设置和开发。该框架使用...

    Java基于SpringBoot+MyBatis大学生租房平台的设计与实现.zip

    要完成安装,首先使用brew tap pivotal / tap切换到pivotal存储库,然后执行brew install springboot命令。Spring Boot是Pivotal团队的一个新框架,旨在简化新Spring应用程序的初始设置和开发。该框架使用...

    Java基于SpringBoot+MyBatis基于SpringBoot的在线视频教育平台的设计与实现.zip

    要完成安装,首先使用brew tap pivotal / tap切换到pivotal存储库,然后执行brew install springboot命令。Spring Boot是Pivotal团队的一个新框架,旨在简化新Spring应用程序的初始设置和开发。该框架使用...

Global site tag (gtag.js) - Google Analytics