`
ln_ydc
  • 浏览: 270814 次
  • 性别: Icon_minigender_1
  • 来自: 青岛
社区版块
存档分类
最新评论

Maven入门实战笔记08-测试

 
阅读更多

 

测试插件介绍(maven-plugin-plugin)

Maven所做的只是在构建执行到特定生命周期阶段的时候,通过插件来执行JUnit或者TestNG的测试用例。

这一插件就是maven-surefire-plugin,可以称之为测试运行器(Test Runner)

default生命周期test阶段:使用单元测试框架运行测试

 

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

  • **/Test*.java:
  • **/*Test.java:
  • **/*TestCase.java:

只要将测试类按上述模式命名,Maven就能自动运行它们,

注意:以Tests结尾的测试类不会得以自动执行

跳过测试

在命令行加参数

 

mvn package -DskipTests

 也可以在POM配置文件中加参数

<plugin>
	<groupId>org.apache.maven.plugins</groupId>
	<artifactId>maven-surefire-plugin</artifactId>
	<version>2.5</version>
	<configuration>
		<skipTests>true</skipTests>
	</configuration>
</plugin>

 Maven也允许跳过编译,但不推荐这么做

 

mvn package -Dmaven.test.skip=true

 跳过编译的POM配置

 

 

<!-- 使用UTF-8编码处理资源文件 -->
<plugin>
	<groupId>org.apache.maven.plugins</groupId>
	<artifactId>maven-resources-plugin</artifactId>
	<version>2.5</version>
	<configuration>
		<encoding>UTF-8</encoding>
		<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>

 手动指定要运行的测试用例

 

 

只运行account-captcha的RandomGeneratorTest

mvn test -Dtest=RandomGeneratorTest -DfailIfNoTests=false

 test参数还支持高级赋值方式

mvn test -Dtest=Random*Test

 除星号匹配外,还可以使用逗号指定多个测试用例

mvn test -Dtest=RandomGeneratorTest,AccountCaptchaServiceTest

 也可以结合使用星号和逗号

mvn test -Dtest=*Test,AccountCaptchaServiceTest

 

test参数必须匹配一个或者多个测试类,如果maven-surefire-plugin找不到任何匹配的测试类,就会报错并导致构建失败,如

mvn test -Dtest

 加上-DfailIfNoTests=false,告诉maven-surefire-plugin即使没有任何测试也不要报错

mvn test -Dtest -DfailIfNoTests=false

包含与排除测试用例

通过额外的配置来自定义包含一些其他测试类,或者排除一些符合默认命名模式的测试类

自动运行以Tests结尾的测试类

<!-- 自动运行以Tests结尾的测试类 -->
<plugin>
	<groupId>org.apache.maven.plugins</groupId>
	<artifactId>maven-surefire-plugin</artifactId>
	<version>2.5</version>
	<configuration>
		<includes>
			<include>**/*Tests.java</include>
		</includes>
	</configuration>
</plugin>

 排除一些符合默认命名模式的测试类

<!-- 排除运行测试类 -->
<plugin>
	<groupId>org.apache.maven.plugins</groupId>
	<artifactId>maven-surefire-plugin</artifactId>
	<version>2.5</version>
	<configuration>
		<excludes>
			<exclude>**/*ServiceTest.java</exclude>
		</excludes>
	</configuration>
</plugin>

 

测试报告

基本的测试报告

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

简单文本格式

与JUnit兼容的XML格式

测试覆盖率报告

测试报告覆盖率是衡量项目代码质量的一个重要参考指标

Cobertura是一个优秀的开源测试覆盖率统计工具(http://cobertura.sourceforge.net/),

Maven通过cobertura-maven-plugin与之集成,用户可以使用简单命令为Maven项目生成测试覆盖率报告,如:

mvn cobertura:cobertura

 执行完成后,打开target/site/cobertura/下的index.html文件,就能看到测试覆盖率报告

运行TestNG测试

TestNG是Java除JUnit之外另一个流行的单元测试框架。

NG是Next Generation  

相关资料:

http://testng.org

《Next Generation Java Testing》(Java测试新技术)

首先要删除POM中的JUnit依赖,加入TestNG依赖,如:

<dependency>
	<groupId>org.testng</groupId>
	<artifactId>testng</artifactId>
	<version>6.8</version>
	<scope>test</scope>
</dependency>

 TestNG允许用户使用一个名为testng.xml的文件来配置想要运行的测试集合

可以在account-captcha的项目根目录下创建一个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.9</version>
	<configuration>
		<suiteXmlFiles>
			<suiteXmlFile>testng.xml</suiteXmlFile>
		</suiteXmlFiles>
	</configuration>
</plugin>

 

TestNG较JUnit的一大优势在于它支持测试组的概念,如下的注解会将测试方法加入到两个测试组util和medium中

package com.juvenxu.mvnbook.account.captcha;

import static org.junit.Assert.assertFalse;

import java.util.HashSet;
import java.util.Set;

import org.testng.annotations.Test;


public class RandomGeneratorTest {
	@Test (groups = { "util", "medium" })
	public void testGetRandomString() throws Exception {
		Set<String> randoms = new HashSet<String>(100);

		for (int i = 0; i < 100; i++) {
			String random = RandomGenerator.getRandomString();

			assertFalse(randoms.contains(random));

			randoms.add(random);
		}
	}
}

 由于用户可以自由地标注方法所属的测试组,因此这种机制能让用户在方法级别对测试进行归类

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

 

重用测试代码

mvn package,Maven会将项目的主代码及资源文件打包,将其安装或部署到仓库之后,这些代码就能为他人所用,从而实现Maven项目级别的应用。

默认的打包行为不会包含测试代码的,因此在使用外部依赖的时候,其构件一般不会包含测试代码

在项目内部重用某个模块的测试代码是很常见的需求,可能某个底层模块的测试代码中包含了一些常用的测试工具类,或者一些高质量的测试基类供继承。这个时候,Maven用户就需要通过配置maven-jar-plugin将测试类打包,如:

<plugin>
	<groupId>org.apache.maven.plugins</groupId>
	<artifactId>maven-jar-plugin</artifactId>
	<version>2.4</version>
	<executions>
		<execution>
			<goals>
				<goal>test-jar</goal>
			</goals>
		</execution>
	</executions>
</plugin>

 maven-jar-plugin有两个目标,分别是jar和test-jar,前者通过Maven的内置绑定在default生命周期的package阶段运行,其行为就是对项目主代码进行打包,而后者并没有内置绑定,因此上述插件配置显式声明该目标来打包测试代码

 

上述依赖声明中有一个特殊的元素type,所有测试包构件都使用特殊的test-jar打包类型。需要注意的是,这一类型的依赖同样都使用test依赖范围。

 

-----------------------------------------------------------------------------------

@author Free Coding http://ln-ydc.iteye.com

  • 大小: 14.7 KB
  • 大小: 27.2 KB
分享到:
评论

相关推荐

    Maven入门实战笔记02-基础(2)

    【标题】"Maven入门实战笔记02-基础(2)" 涉及的主要知识点是Maven的基础使用,包括项目的创建、配置文件的理解以及依赖管理等。Maven是一款强大的Java项目管理和集成工具,它帮助开发者统一构建过程,管理项目的依赖...

    读书笔记:Maven入门与实战.zip

    读书笔记:Maven入门与实战

    maven_实战_学习笔记

    maven_实战_学习笔记 Maven安装 Maven 使用入门 主代码 位置:src/main/java 命令:mvn clean compile 解释:clean告诉maven清理target目录 compile告诉maven 编译项目主代码 测试代码 位置:src/test/java 命令...

    maven从入门到实战

    本文首先针对maven3.3.3 的版本构建普通Java 应用和Java Web 应用进行讲解。然后针对公司私有maven 库的情况下,如何安装自有资源及在maven 应用中使用私有maven 库中的资源进行说明。接下来针对maven 与配置管理...

    读书笔记:Lucene全文检索入门项目 Java实现Maven项目 Elasticsearch 基础实战.zip

    读书笔记:Lucene全文检索入门项目 Java实现Maven项目 Elasticsearch 基础实战

    JUnit入门笔记~

    这篇入门笔记将带你深入了解JUnit的基本概念、使用方法以及其在实际开发中的应用。 **一、JUnit简介** JUnit是一个开源的、基于Java的测试框架,它简化了对代码进行单元测试的过程。通过JUnit,开发者可以快速地...

    SpringBoot与Shiro整合-权限管理实战-课堂笔记.docx

    【SpringBoot与Shiro整合-权限管理实战】的课程主要关注如何将Spring Boot与Apache Shiro框架结合起来,实现高效的安全管理。Spring Boot是Spring框架的一个简化版本,旨在提高开发效率,减少配置工作,同时提供了很...

    Java秒杀系统方案优化高性能高并发学习实战源代码以及笔记..zip

    Java秒杀系统方案优化高性能高并发学习实战源代码以及笔记..zip 章节笔记 第1章-课程介绍及项目框架搭建 知识点 使用spring boot 搭建项目基础框架 使用Thymeleaf做页面展示,封装Result统一结果 集成 mybatis + ...

    2.2 SpringBoot与Shiro整合-权限管理实战-课堂笔记.docx

    【SpringBoot与Shiro整合-权限管理实战】 在本文中,我们将探讨如何将Spring Boot与Apache Shiro框架整合,以实现高效且灵活的权限管理系统。首先,我们需要了解这两个框架的基本概念。 **Spring Boot框架简介** ...

    springboot学习笔记(史上最全)

    **SpringBoot学习笔记** SpringBoot是由Pivotal团队开发的一款基于Java的轻量级框架,旨在简化Spring应用的初始搭建以及开发过程。它通过自动配置、起步依赖和运行时嵌入式服务器,使得开发者能够快速地创建独立的...

    java-concurrent-programming:《实战Java高并发程序设计》笔记和二进制整理

    《实战Java高并发程序设计》笔记和源码笔记《实战Java高并发程序设计》中有很多代码范例,适合初学者通过实践入门并发编程,这本书有个问题就是前面的代码都用JDK7,第六章开始又用JDK8了笔者精心制作相关笔记并整理...

    笔记CoderEsky

    【笔记CoderEsky】是一个与编程相关的学习资料集合,尤其关注Java这门广泛使用的编程语言。这个压缩包可能包含了各种笔记、代码示例、学习指南和其他有助于深入理解Java编程的知识资源。由于描述部分未提供具体信息...

    Eclipse开发分布式商城系统+完整视频代码及文档

    │ │ JVM调优实战.doc │ │ Tomcat7优化.docx │ │ 深入理解Java内存模型.pdf │ │ │ └─课后资料 │ ├─笔记 │ │ 淘淘商城_day20_课堂笔记.docx │ │ │ └─视频 │ 07-使用Jedis连接集群操作.avi │ ...

    Eclipse开发学习笔记

    《Eclipse开发学习笔记》这本书涵盖了Eclipse的基础知识、高级特性以及实战技巧,是初学者入门和进阶的良好资源。通过学习,读者不仅可以掌握Eclipse的基本操作,还能了解到如何利用Eclipse进行高效开发,以及如何...

    Java Web框架技术笔记

    《Java Web框架技术笔记》是一份深入探讨Java Web开发的资料,特别关注Spring框架及其与Vue.js的结合使用。这份笔记旨在帮助开发者理解和掌握基于Java的Web开发,包括网页、应用程序以及微信小程序的开发。 课程...

    SSM笔记和代码.rar

    2. **实战代码**:这部分可能包含了一个或多个实际的SSM项目案例,涵盖了从环境搭建、配置文件编写、Maven依赖管理、DAO层、Service层、Controller层的实现,一直到项目的部署和运行。这些代码示例可以帮助开发者...

    CS-Notes-master.zip

    4. **框架和库**:Java有众多流行框架,如Spring用于企业级应用开发,Hibernate用于对象关系映射,Maven或Gradle用于构建管理,以及JUnit用于单元测试等。笔记可能涵盖这些工具的使用方法和最佳实践。 5. **实战...

    ibatis学习笔记(一)

    通过阅读这份笔记,读者应该能够掌握Ibatis的基本用法,并具备初步的实战能力。对于深入学习,还可以研究Ibatis的高级特性,如结果映射的复杂配置、缓存机制以及MyBatis Generator等工具的使用。

Global site tag (gtag.js) - Google Analytics