Maven运行JUnit测试(http://www.360doc.com/content/13/0927/15/7304817_317455642.shtml)
2013-11-27 10:21
260 查看
Maven单元测试分类: maven 2012-05-09 15:17 1986人阅读 评论(1) 收藏 举报maven测试junit单元测试javarandom 目录(?)[-] maven-surefire-plugin简介 跳过测试 动态指定要运行的测试用例 包含与排除测试用例 生成测试报告 基本测试报告 测试覆盖率报告 运行TestNG测试 重用测试代码 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] view plaincopyprint? mvn package -DskipTests 也可以在pom配置中提供该属性。 [html] view plaincopyprint? <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>2.5</version> <configuration> <skipTests>true</skipTests> </configuration> </plugin> 有时候可能不仅仅需要跳过测试运行,还要跳过测试代码的编译: [plain] view plaincopyprint? mvn package -Dmaven.test.skip=true 也可以在pom中配置maven.test.skip: [html] view plaincopyprint? <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用户能够在命令行指定要运行的测试用例。如:[plain] view plaincopyprint? mvn test -Dtest=RandomGeneratorTest 也可以使用通配符: [plain] view plaincopyprint? mvn test -Dtest=Random*Test 或者也可以使用“,”号指定多个测试类: [plain] view plaincopyprint? mvn test -Dtest=Random*Test,AccountCaptchaServiceTest 如果没有指定测试类,那么会报错并导致构建失败。 [plain] view plaincopyprint? mvn test -Dtest 这时候可以添加-DfailIfNoTests=false参数告诉maven-surefire-plugin即使没有任何测试也不要报错。 [plain] view plaincopyprint? mvn test -Dtest -DfailIfNoTests=false 由此可见,命令行参数-Dtest -DfailIfNoTests=false是另外一种路过测试的方法 4.包含与排除测试用例如果由于历史原因,测试类不符合默认的三种命名模式,可以通过pom.xml设置maven-surefire-plugin插件添加命名模式或排除一些命名模式。[html] view plaincopyprint? <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项目生成测试覆盖率报告。运行下面命令生成报告:[plain] view plaincopyprint? mvn cobertura:cobertura 6.运行TestNG测试TestNG是Java社区中除了JUnit之外另一个流行的单元测试框架。TestNG在JUnit的基础上增加了很多特性,其站点是http://testng.org/ .添加TestNG依赖:[html] view plaincopyprint? <dependency> <groupId>org.testng</groupId> <artifactId>testng</artifactId> <version>5.9</version> <scope>test</scope> <classifier>jdk15</classifier> </dependency> 下面是JUnit和TestNG的常用类库对应关系
[html] view plaincopyprint? <?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,如: [html] view plaincopyprint? <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的一大优势在于它支持测试组的概念。如可以在方法级别声明测试组: [java] view plaincopyprint? @Test(groups={"util","medium"}) 然后可以在pom中配置运行一个或多个测试组: [html] view plaincopyprint? <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将测试类打包,如: [html] view plaincopyprint? <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生成的测试代码包,可以如下配置: [html] view plaincopyprint? <dependency> <groupId>com.juvenxu.mvnbook.account</groupId> |
相关文章推荐
- Maven运行JUnit测试之mvn test的默认行为
- 第10章 从Maven2中运行JUnit测试(第三部分 JUnit与构建过程)
- Maven项目Junit测试类运行报错
- [置顶] maven项目junit测试运行时提示java.lang.NoClassDefFoundError: xx
- Maven运行JUnit测试之mvn test的默认行为
- JUnit学习笔记5---从Maven中运行测试
- JUnit学习笔记5---从Maven中运行测试
- Maven中运行Junit测试Log4j的配置
- [深入JUnit] 测试运行的入口
- spock+maven+junitReport接口测试框架
- 解决 使用了maven的项目中,进行Junit测试时的 java.lang.NoClassDefFoundError
- junit 测试问题 No qualifying bean of type [javax.servlet.http.HttpServletRequest] found for dependency
- Junit指定测试运行顺序
- Junit+Selenium+Maven+SVN+Eclipse+AutoFrame全自动化测试实践实例(一)
- Junit+Selenium+Maven+SVN+Eclipse+AutoFrame全自动化测试实践实例(二)
- Junit+spring创建JNDI运行测试用例
- 关于Hibernate 在Junit测试中可以成功但是在Web下却无法运行的处理方法
- maven+spring+junit测试程序时时出现NoSuchMethodError错误
- junit源码解析--测试驱动运行阶段
- 解决Eclipse项目中有sql-map-config.xml文件但是运行Junit测试ibatis时提示找不到该文件的一种方法