文档章节

Maven实战读书笔记(10)

祥林会跟你远走高飞
 祥林会跟你远走高飞
发布于 2014/12/17 17:01
字数 2062
阅读 206
收藏 3

account-captchaPOM配置

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

       xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">

       <modelVersion>4.0.0</modelVersion>

       <parent>

              <groupId>com.juvenxu.mvnbook.account</groupId>

              <artifactId>account-parent</artifactId>

              <version>1.0.0-SNAPSHOT</version>

       </parent>

 

       <artifactId>account-captcha</artifactId>

       <name>Account Captcha</name>

 

       <properties>

              <kaptcha.version>2.3</kaptcha.version>

       </properties>

 

       <dependencies>

              <dependency>

                     <groupId>com.google.code.kaptcha</groupId>

                     <artifactId>kaptcha</artifactId>

                     <version>${kaptcha.version}</version>

                     <classifier>jdk15</classifier>

              </dependency>

              <dependency>

                     <groupId>org.springframework</groupId>

                     <artifactId>spring-core</artifactId>

              </dependency>

              <dependency>

                     <groupId>org.springframework</groupId>

                     <artifactId>spring-beans</artifactId>

              </dependency>

              <dependency>

                     <groupId>org.springframework</groupId>

                     <artifactId>spring-context</artifactId>

              </dependency>

              <dependency>

                     <groupId>junit</groupId>

                     <artifactId>junit</artifactId>

              </dependency>

       </dependencies>

 

       <repositories>

              <repository>

                     <id>sonatype-forge</id>

                     <name>Sonatype Forge</name>

                     <url>http://repository.sonatype.org/content/groups/forge/</url>

                     <releases>

                            <enabled>true</enabled>

                     </releases>

                     <snapshots>

                            <enabled>false</enabled>

                     </snapshots>

              </repository>

       </repositories>

</project>

对上面的配置进行解释:

1Kaptcha是一个用来生成验证码 (Captcha) 的开源类库,其主页:http://code.google.com/p/kaptcha

2Kaptcha依赖还有一个classifier元素,其值为jdk5Kaptcha针对1.51.4提供了不同的分发包

3POM的最后声明了Sonatype Forge这一公共仓库,这是因为Kaptcha并没有上传到中央仓库,我们可以从Sonatype Forge仓库,或者直接将Kaptcha上传到自己的仓库中

4、如果配置了nexus,并且配置了镜像,配置这个仓库就不会起作用了,需要下载该包然后上传到nexux上去

 

maven-surefire-plugin简介

1Maven本身并不是一个单元测试框架

2Java世界中主流的单元测试框架为JUnit(http://www.junit.org/)TestNG(http://testng.org/)

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

4、可称maven-surefire-plugin为测试运行器(Test Runner)

5、这个插件可以很好地兼容JUnit3JUnit4以及TestNG

 

default生命周期的test阶段

这个test阶段被定义为 "使用单元测试框架运行测试"

我们知道,生命周期阶段需要绑定到某个插件的目标才能真正的工作

test阶段正式与maven-surefire-plugintest目标相绑定了,这是一个内置的绑定

 

maven-surefire-plugintest目标

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

n         **/Test*.java:任何子目录下所有命名以Test开头的Java

n         **/*Test.java:任何子目录下所有命名以Test结尾的Java

n         **/*TestCase.java:任何子目录下所有命名以TestCase结尾的Java

只要将测试类按上述模式命名,Maven就能自动运行它们,用户也就不再需要定义测试几何(TestSuite)来聚合测试用例 TestCase 关于模式需要注意的是,以Tests结尾的测试类是不会得以自动执行的

 

有时候需要跳过测试

1、我敢保证这次改动不会导致任何测试失败

2、测试运行太耗时了,暂时跳过一下

3、有持续集成服务跑所有测试呢,我本地就不执行啦

在大部分情况下,这些想法都是不对的,任何改动都要交给测试去验证,测试运行耗时过长应该考虑优化测试,更不要完全依赖持续集成服务来报告错误,测试错误应该尽早在尽小范围内发现,并及时修复

 

通过命令行方式跳过测试

mvn package -DskipTests

 

POM中配置maven-surfire-plugin插件的属性,来跳过测试(不推荐)

<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

参数maven.test.skip同时控制了maven-compiler-pluginmaven-surefire-plugin两个插件的行为,测试代码编译跳过了,测试运行也跳过了

 

通过POM配置,即跳过测试代码的编译又跳过测试运行(不推荐)

<plugin>

       <groupId>org.apache.maven.plugins</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>

实际上maven-compiler-plugintestCompile目标和maven-surefire-plugintest目标都提供了一个参数skip用来跳过测试编译和测试运行,而这个参数对应的命令行表达式为maven.test.skip

 

反复运行单个测试用例是日常开发中很常见的行为

例如,项目代码中有一个失败的测试用例,开发人员就会想要再次运行这个测试以获得详细的错误报告,在修复该测试的过程中,开发人员也会反复运行它,已确认修复代码是正确的。如果仅仅为了一个失败的测试用例而反复运行所有测试,未免太浪费时间了,当项目中测试的数目比较大的时候,这种浪费尤为明显

 

maven-surefire-plugin提供了一个test参数

这个参数让Maven用户能够在命令行指定要运行的测试用例

例如,如果只想运行account-captchaRandomGeneratorTest,就可以使用如下命令:

mvn test -Dtest=RandomGeneratorTest

 

使用通配符*

mvn test -Dtest=Random*Test

星号可以匹配零个或多个字符,上述命令会运行项目中所有类名以Random开头、Test结尾的测试类

 

使用逗号指定多个测试用例

mvn test -Dtest=RandomGeneratorTest,AccountCaptchaServiceTest

 

test参数的值必须匹配一个或多个测试类

mvn test -Dtest

maven-surefire-plugin找不到任何匹配的测试类,就会报错并导致构建失败

 

使用-DfailIfNoTests=false配置

mvn test -Dtest -DfailIfNoTests=false

告知maven-surefire-plugin即使没有任何测试也不要报错,这也是另一种跳过测试的方法

 

从上面可以看到,test参数用户可以从命令行灵活地指定要运行的测试类,可惜的是maven-surefire-plugin并没有提供任何参数支持用户从命令行跳过指定的测试类,好在用户可以通过POM中配置maven-surefire-plugin排除特定的测试类

 

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

<plugin>

       <groupId>org.apache.maven.plugins</groupId>

       <artifactId>maven-surefire-plugin</artifactId>

       <version>2.5</version>

       <configuration>

              <include>**/*Tests.java</include>

       </configuration>

</plugin>

 

排除运行测试类

<plugin>

       <groupId>org.apache.maven.plugins</groupId>

       <artifactId>maven-surefire-plugin</artifactId>

       <version>2.5</version>

       <configuration>

              <excludes>

                     <exclude>**/*ServiceTest.java</exclude>

                     <exclude>**/TempDaoTest.java</exclude>

              </excludes>

       </configuration>

</plugin>

 

测试报告

除了基本的命令行输出,Maven用户可以使用maven-surefire-plugin等插件以文件的形式生成更丰富的测试报告

 

基本的测试报告

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

1、简单文本格式

2JUnit兼容的XML格式

 

测试覆盖率报告

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

例如可以在account-captcha目录下运行如下命令生成报告:

mvn cobertura:cobertura

接着会在target/site/cobertura/下生成一个index.xml文件,可以通过它查看测试覆盖率报告

 

重用测试代码

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

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

 

打包测试代码

<plugin>

       <groupId>org.apache.maven.plugins</groupId>

       <artifactId>maven-jar-plugin</artifactId>

       <version>2.2</version>

       <executions>

              <execution>

                     <golas>

                            <goal>test-jar</goal>

                     </goals>

              <execution>

       </executions>

</plugin>

 

maven-jar-plugin有两个目标,分别是jartest-jar

1jar目标是通过Maven的内置绑定在default生命周期的package阶段运行,其行为就是对项目主代码进行打包

2、而test-jar并没有内置绑定,因此上述的插件配置显式声明该目标来打包测试代码

3test-jar的默认绑定声明周期阶段为package

 

如何依赖测试包构件

<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>

 


© 著作权归作者所有

祥林会跟你远走高飞
粉丝 27
博文 50
码字总数 98029
作品 0
昌平
程序员
私信 提问
读书笔记博客实战之搜索引擎索引和流量涨跌策略分析[图]

写在前面:最近百度动作频繁,变化十分大,以至于很多网站都出现了流量的大范围波动,引起了站长们的思考和分析猜测,但通过数据来分析是最可靠的观点,那么我们今天就来分析一下这几天百度在...

原创小博客
2018/05/17
0
0
Maven实战读书笔记(13)

WAR 1、基于Java的Web应用,其标准的打包方式是WAR 2、WAR与JAR类似,不过它包含更多的内容,如JSP文件、Servlet、Java类、web.xml配置文件、依赖JAR包、静态web资源(如HTML、CSS、JavaScr...

祥林会跟你远走高飞
2014/12/22
0
0
敏捷教练成长记:秋高气爽第四周

不知不觉坚持了四周了,这周很忙,写读书笔记时尽显疲态,有厌倦的感觉了。需要自我调整,继续坚持。 1、敏捷方面读不少于50页的书或者文章。 阅读《持续交付-发布可靠软件的系统方法》第三章...

转型实践者
2017/11/26
0
0
Maven实战读书笔记(17)

Eclipse 1、eclipse是非常流行的IDE,为了方便用户,日常开发使用的各种工具都会提供相应的Eclipse插件 2、Eclipse默认就集成了JUnit单元测试框架、CVS版本控制工具以及Mylyn任务管理框架 3、...

祥林会跟你远走高飞
2014/12/25
0
0
Maven实战读书笔记(16)

Maven聚合项目信息 1、Maven不仅仅是一个自动化构建工具和一个依赖管理工具,它还能够帮助聚合项目信息,促进团队间的交流 2、POM可以包含各种项目信息,如项目描述、版本控制系统地址、缺陷...

祥林会跟你远走高飞
2014/12/25
0
0

没有更多内容

加载失败,请刷新页面

加载更多

树莓派Zero的初始化

概述 树莓派0拿到手之后,真是爱不释手,如此小巧,配置不逊于一些低端的VPS,又具备IO口/wifi/蓝牙,还可选配摄像头.实乃居家必备之神器. 但是体积如此之小巧,用起来还是有一些问题的.比如usb口过...

一曲忠臣的战歌
37分钟前
2
0
ViewPager懒加载极致优化

目录介绍 01.ViewPager简单介绍 02.ViewPager弊端分析 03.ViewPager预加载 04.ViewPager部分源码 05.懒加载出现问题 06.如何实现预加载机制 07.懒加载配合状态管理器 吕诗禹想换个工作,渴望...

杨充
54分钟前
1
0
shadeEffect动态消失渲染

import QtQuick 2.0ShaderEffect { id:genieEffect anchors.centerIn: parent property variant source mesh:GridMesh{resolution: Qt.size(10,10)} propert......

蓝栩液枫
57分钟前
3
0
苦逼程序员的真实生活 

程序员这个行业虽然待遇还不错,但是不仅累,拿命去换取的,很多时候也是很苦逼的,有多少程序员还在苦苦追求心里的那个她。我就是千万程序员大军中的一员,其中有多苦逼我最清楚,以下的12张...

linux服务器架构
59分钟前
5
0
idea 创建maven 分支apply-patch中模块

1.点击idea 有上角的 project structure 2.选择modules-->点击“+”-->new module--->maven-->添加group id=com.paic.gamma.apply ,artifactid-分支名(qilu-bank),version=1.0-SNAPSHOT ......

qimh
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部