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就可以了。如:
也可以在pom配置中提供该属性。
有时候可能不仅仅需要跳过测试运行,还要跳过测试代码的编译:
也可以在pom中配置maven.test.skip:
3.动态指定要运行的测试用例
maven-surefire-plugin提供了一个test参数让Maven用户能够在命令行指定要运行的测试用例。如:
也可以使用通配符:
或者也可以使用“,”号指定多个测试类:
如果没有指定测试类,那么会报错并导致构建失败。
这时候可以添加-DfailIfNoTests=false参数告诉maven-surefire-plugin即使没有任何测试也不要报错。
由此可见,命令行参数-Dtest -DfailIfNoTests=false是另外一种路过测试的方法
4.包含与排除测试用例
如果由于历史原因,测试类不符合默认的三种命名模式,可以通过pom.xml设置maven-surefire-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项目生成测试覆盖率报告。运行下面命令生成报告:
6.运行TestNG测试
TestNG是Java社区中除了JUnit之外另一个流行的单元测试框架。TestNG在JUnit的基础上增加了很多特性,其站点是
http://testng.org/.添加TestNG依赖:
下面是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
同时再配置maven-surefire-plugin使用该testng.xml,如:
TestNG较JUnit的一大优势在于它支持测试组的概念。如可以在方法级别声明测试组:
然后可以在pom中配置运行一个或多个测试组:
7.重用测试代码
当命令行运行mvn package的时候,Maven只会打包主代码及资源文件,并不会对测试代码打包。如果测试代码中有需要重用的代码,这时候就需要对测试代码打包了。
这时候需要配置maven-jar-plugin将测试类打包,如:maven-jar-plugin有两个目标,分别为jar和test-jar。这两个目标都默认绑定到default生命周期的package阶段运行,只是test-jar并没有在超级POM中配置,因此需要我们另外在pom中配置。
现在如要引用test-jar生成的测试代码包,可以如下配置:
分享到:
相关推荐
jacoco单元测试覆盖率+maven DEMO
在dubbo的注册服务下单元测试,然后扫描 注册上来的各种服务,轻松测试每个注册服务
单元测试覆盖率
maven项目,单元测试jacoco、junit...........................................................................................
使用Maven运行单元测试 将项目安装到Maven本地资源库 生成基于Maven的项目文档站点 使用“mvn site-deploy”部署站点(WebDAV例子) 部署基于Maven的war文件到Tomcat Eclipse创建一个Maven Web项目 在易百教程网...
空白的,经过单元测试的,mavenWeb项目
介绍这个示例项目展示了如何分别运行单元测试和集成测试仅通过测试安装应用程序 mvn clean install仅运行测试 mvn test使用测试和集成测试安装应用程序 mvn clean install -Pintegration-test运行集成测试 mvn ...
MvnTestsSeparation 尝试使用 maven 分离单元测试和集成测试
使用Idea工具建立的Maven工程,整合Spring和MyBatis,成功通过单元测试
详细描述了持续集成环境的搭建步骤,包括集成hudson sonar maven等环境进行单元测试自动执行,代码规则校验等。是搭建持续集成环境,改建软件自动化测试和校验的学习精品。
Maven 项目对象模型 Maven搭建过程 web 模块加载另外一个web模块方法 Myeclipse Maven 忽略单元测试打包 一个多maven项目聚合的实例
[JavaWeb]_[初级]_[对Jfinal框架的Controller进行单元测试] 博客文章https://infoworld.blog.csdn.net/article/details/124176492对应的项目, 使用maven管理项目,导入pom.xml.
因项目需要,所以我自己弄了一个SSH框架下单元...所具有的技术 基于Maven 和SSH框架,单元测试Service层采用PowerMock+Junit 来组合,可以接口进行测试 可以参考博客:http://www.cnblogs.com/Fly-Bob/p/7784184.html
jeeweb是优秀的web快速开发框架jeeweb-mybatis非maven版本
基于屏幕的自动化Sikuli UI Sikuli API单元测试(跑步者) 朱尼特4.12 测试NG 6.6.9整合测试正在汇报引诱宁静(报告使用) 程度Maven单元测试报告Cucumber报告Fitnesse报告BDD CucumberFitnesse 具有魅力的注解网络...
YAML配置模板yaml tempaltes可用于docker设置 :列出每个已安装的环境,并从docker image'hello world'打个招呼 :git clone spring演示项目并运行maven单元测试,包 :运行go lint,测试并上传测试覆盖率报告 :...
添加单元测试资源 4.12. 执行单元测试 4.12.1. 忽略测试失败 4.12.2. 跳过单元测试 4.13. 构建一个打包好的命令行应用程序 5. 一个简单的Web应用 5.1. 介绍 5.1.1. 下载本章样例 5.2. 定义这个简单的...
单元测试应该在何处进行?依赖的jar包应该如何放置?如何构建项目,如何形成文档,如何测试和部署项目?项目人员的最终选择方案会影响到项目的整个生命周期!构建一个Java项目可以使用很多工具,相信许多组织必须在 ...
5、测试Spring+mybatis的框架搭建,写单元测试JUnit,测试事务配置等:model-->dao(mapper)-->service-->test 6、映入SpringMVC:配置SpringMVC配置信息。-->配置文件:spring-mvc.xml(扫描controller) 7...
MvnRunner 一个用于maven模块的IntelliJ插件,由mvn构建,运行单元测试和主要方法。插件做了什么?针对maven管理的Java项目,添加maven模块内置菜单;在运行和调试两个菜单项上添加maven的处理方式,根据直接调用...