- 浏览: 704566 次
- 性别:
- 来自: 北京
博客专栏
-
读金庸故事,品程序人生
浏览量:47755
文章分类
最新评论
-
hty881008:
LZ,你的json返回是怎么出来的,我的怎么是No messa ...
使用CXF暴露您的REST服务 -
jxFY:
赞
Apache的对象池化工具commons-pool -
wangyudong:
新版本的Wisdom RESTClient地址https:// ...
使用CXF暴露您的REST服务 -
wangyudong:
由CXF实现的微服务需要有比较好的工具去测试RESTful A ...
使用CXF暴露您的REST服务 -
spring_springdata:
可以参考最新的文档:如何在eclipse jee中检出项目并转 ...
Maven3实战笔记01环境配置与使用入门
1. 测试简介
这里所说的测试主要是指单元测试,一般说Java的单元测试都知道有个Junit。确实目前很多公司,无论什么行业,基本都是使用junit进行单元测试,一般银行、电信、股票项目每个功能类都必须有相应的单元测试类,而且测试用例也是极其苛刻的。而且每一行代码都需要有log追踪。生成的测试报告也要成为相应的成果物交与甲方。稍微差一点的,单元测试也就是一个形式,因为很多情况(由以国内政务项目为主)都是业务逻辑集成UI功能都做完了,之后再回去补单元测试,其实是为了应付甲方合同中的测试报告。话说多了,偏离了主题。Maven构建项目的时候可以执行我们的单元测试,底层是调用了Maven的插件maven-surefire-plugin执行单元测试用例。
2. 新模块的需求与开发
再展示Maven的测试功能之前,我们先来开发一个新的模块,随机验证码的功能模块。随机验证码我们在网上都用过,在此不再详细说了,直接看代码即可。此处用到了一个google开源的组件。这个在笔者的另一篇blog
http://suhuanzheng7784877.iteye.com/blog/1076066中有介绍,在此不再赘述。
先来看生成随机数业务代码
AccountImageUtil
package com.liuyan.account.mail;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
import java.util.Random;
import com.google.code.kaptcha.impl.DefaultKaptcha;
import com.google.code.kaptcha.util.Config;
public class AccountImageUtil {
static DefaultKaptcha defaultKaptcha = new DefaultKaptcha();
static Map<Integer, String> map;
static int key = 0;
static Random random;
static {
defaultKaptcha.setConfig(new Config(new Properties()));
map = new HashMap<Integer, String>();
random = new Random();
}
public static String generateText() {
StringBuffer sb = new StringBuffer();
for (int i = 0; i < 4; i++) {
int a = random.nextInt(10);
sb.append(a);
}
map.put(key, sb.toString());
key++;
return sb.toString();
}
}
以上业务辅助类初始化了图片生成组件,之后调用随机函数类生成四位的随机数。
再来看看生成图片的类AccountImageServiceImpl,接口不再给出了
这个类就是调用辅助类生成图片的。下面我们编写单元测试。 3. 新模块的测试 AccountImageUtilTest代码如下
AccountImageServiceImplTest如下
之后在控制台运行如下指令
之后效果如下
运行报告是junit自己的报告输出,和咱们在Eclipse运行的报告差不多。以上代表运行了3个用例,和预期效果不符的是0个,失败的用例是0个,忽略的用例数是0个。 如果需要跳过单元测试,则可以运行如下命令
大家可能要问,为何Maven能够自己寻找我们编写的测试类呢?其实还是那句约定大于配置。Maven自动去寻找src/test/java下面的类,当此文件夹下面的类符合以下规范,那么Maven默认认为他们是单元测试用例类。 Test*.java:任何目录下以Test为开始的类 *Test.java: 任何目录下以Test为结尾的类 *TestCase.java: 任何目录下以TestCase为结尾的类。 如果想在一段时间内节省项目构建时间,暂时全部忽略单元测试。那么可以在pom.xml中配置如下
等到项目完全开发完了,需要测试用例的时候将其注释掉即可。 本个模块有两个测试用例类,如果仅仅想运行一个测试用例该怎么办。运行下面命令
这个是指定具体运行哪个测试用例。当然需要将pom文件中忽略测试用例的配置注释掉。 也可以测试多个测试用例
也可以使用模糊匹配进行测试 我们也可以通过pom文件配置我们想要测试的类与不想测试的类
includes是需要测试的类,excludes是要排除之外测试用例。可以使用模糊匹配。**用来匹配任意件路经,*匹配任意类。 4. 测试报告 基本的测试报告上面已经介绍过了,下面我们看看测试覆盖率的报告。运行如下命令
在target文件夹下出现了一个site目录,下面是一个静态站点,里面就是单元测试的覆盖率报告。
5. 总结 这次我们介绍了Maven的测试,可以运行项目的单元测试用例,并生成报告。使用者可以根据自己的需要配置测试选项以满足项目的测试需求。最后说一下,测试十分重要,往往大手笔的产品测试人员和开发人员的比例是2:1。
package com.liuyan.account.mail;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import javax.imageio.ImageIO;
public class AccountImageServiceImpl implements AccountImageService {
@Override
public byte[] generateText() {
BufferedImage bufferedImage = AccountImageUtil.defaultKaptcha
.createImage(AccountImageUtil.generateText());
ByteArrayOutputStream out = new ByteArrayOutputStream();
try {
ImageIO.write(bufferedImage, "jpg", out);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
File file = new File("c:/1.jpg");
try {
FileOutputStream fileOut = new FileOutputStream(file);
fileOut.write(out.toByteArray());
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return out.toByteArray();
}
public String getText(Integer key) {
String value = AccountImageUtil.map.get(key);
return value;
}
@Override
public boolean validateText(Integer key, String text) {
String value = AccountImageUtil.map.get(key);
return value.equals(text);
}
}
package com.liuyan.account.mail;
import static org.junit.Assert.assertFalse;
import org.junit.Test;
public class AccountImageUtilTest {
@Test
public void testGenerateText() {
String value = AccountImageUtil.generateText();
assertFalse("1111".equals(value));
}
}
package com.liuyan.account.mail;
import static org.junit.Assert.*;
import org.junit.Test;
public class AccountImageServiceImplTest {
AccountImageServiceImpl accountImageServiceImpl = new AccountImageServiceImpl();
@Test
public void testGenerateText() {
byte[] b = accountImageServiceImpl.generateText();
assertTrue(b != null);
}
@Test
public void testValidateText() {
String text = accountImageServiceImpl.getText(0);
System.out.println("---------------------------------" + text);
assertTrue(!text.equals("0000"));
}
}
mvn test
-------------------------------------------------------
T E S T S
-------------------------------------------------------
Running com.liuyan.account.mail.AccountImageServiceImplTest
---------------------------------1990
Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.926 sec
Running com.liuyan.account.mail.AccountImageUtilTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.001 sec
Results :
Tests run: 3, Failures: 0, Errors: 0, Skipped: 0
mvn package -DskipTests
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.5</version>
<configuration>
<skipTests>true</skipTests>
</configuration>
</plugin>
</plugins>
</build>
test -Dtest=AccountImageServiceImplTest
mvn test -Dtest=AccountImageServiceImplTest,AccountImageUtilTest
mvn test -Dtest=*Test
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.5</version>
<configuration>
<includes>
<include>**/*Test.java</include>
</includes>
<excludes>
<exclude>**/AccountImageUtilTest.java</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
mvn cobertura:cobertura
发表评论
-
Memcache工作原理总结
2014-03-07 10:22 17088<!--[if !supportLists]-- ... -
Maven3实战笔记16Maven总结
2011-06-27 09:54 27211. 前言 用了15篇Blog做Maven3的学习笔记,最 ... -
Maven3实战笔记15编写Maven插件
2011-06-24 08:52 66821. 自定义插件介绍 在 ... -
Maven3实战笔记14Maven生成项目站点
2011-06-23 08:52 71761. 前言 一个项目的成败离不开项目各个阶段的信息反馈,总 ... -
Maven3实战笔记13Maven Profile定制化构建
2011-06-22 08:39 120681. 前言 有时候我们开发的软件有不同的环境,开发阶段是开 ... -
Maven3实战笔记11Maven集成Hudson进行持续集成
2011-06-14 09:08 3408唉~~~因为这篇文章篇幅比较大,blog实在不能写得全,因此将 ... -
Maven3实战笔记11Maven集成Hudson进行持续集成1----Hudson环境配置
2011-06-13 16:18 74751. 持续集成 持续集成其实是由敏捷开发这个概念衍生出来 ... -
使用Google工具生成随机验证码
2011-06-11 12:26 10768很多网站都有验证码认证的功能。生成随机数,需要用户自己填写,之 ... -
Maven3实战笔记09Maven的私服-Nexus常用功能
2011-06-09 09:06 83681. 前言 其实介绍Maven私服的资料已经很多了,《Ma ... -
Maven3实战笔记08Maven反应堆
2011-06-08 09:03 23081. 反应堆 反应堆这个名字听上去挺专业,其实就是多个模块 ... -
Maven3实战笔记07继承
2011-06-08 09:01 22111. 继承 之前我们学习Maven的聚合机制遗留个问题,就 ... -
Maven3实战笔记06聚合
2011-06-07 09:07 20411. Maven聚合的 ... -
Maven3实战笔记04Maven的生命周期和插件
2011-06-03 09:15 40541. Maven的生命周期 Maven的生命周期其实是指它 ... -
Maven3实战笔记03Maven仓库
2011-06-03 09:11 33981. 仓库的概念 大家可能注意到了,在基于Maven管理的 ... -
Maven3实战笔记02坐标和依赖--2
2011-06-02 09:34 23675. 依赖调节 假如现在 ... -
Maven3实战笔记02坐标和依赖--1
2011-06-02 09:31 35561. 项目需求 加入我们现在有这样一个小小项目,就是做一个 ... -
Maven3实战笔记01环境配置与使用入门
2011-06-01 10:00 110931. 前言 Maven是apache的一个顶级项目,它的出 ...
相关推荐
从给定的文件信息来看,标题与描述都指向了“Maven3实战笔记(整合)”,这表明文档主要聚焦于Maven3的实践应用与整合经验分享。Maven是Apache软件基金会维护的一个开源项目,是一个项目管理和综合工具,主要用于Java...
《Maven3实战笔记(全)》是一本全面深入介绍Maven3的实践指南,由一位具有独特风格的作者撰写,以其风趣幽默的方式解析了Maven3的各种核心概念和使用技巧。这本书涵盖了从Maven的基础安装与配置,到复杂的仓库依赖...
标题中提及的“Maven3实战笔记”指向了Maven这款流行的Java项目管理和自动化构建工具的第三个主要版本。Maven自从引入以来,就极大地简化了Java项目的构建过程,提高了项目构建的标准化程度。它使用项目对象模型...
根据给定的文件信息,我们可以提取出关于"Maven3实战笔记整合"的知识点。由于文件内容部分出现了大量的乱码和不完整字符序列,无法直接从中提取有用的信息。但是,我们可以根据标题和描述以及通用的Maven知识点,来...
### Maven3实战笔记08——Maven反应堆:深度解析与实战应用 #### Maven反应堆的概念与作用 在深入探讨Maven反应堆之前,我们首先需要理解Maven项目是如何组织和构建的。Maven是一种自动化构建工具,它通过定义项目...
课程目录: Maven3_01_maven概览 Maven3_02_maven安装的注意事项 Maven3_03_在eclipse中建立简单的项目 Maven3_04_maven的依赖特性 Maven3_05_maven的聚合和继承 Maven3_06_复习maven的基本...Maven3实战笔记 Maven配置
【Maven3实战笔记】 Maven3是一款强大的Java项目管理和集成工具,由Apache软件基金会开发。它通过提供一套标准化的构建、依赖管理和项目信息管理的方式来简化项目的生命周期。本实战笔记将深入探讨Maven3的核心概念...
3. **compile**:执行Default生命周期中的`compile`阶段,调用`maven-compiler-plugin`的`compile`目标来编译源代码。 4. **test**:执行Default生命周期中的`test`阶段,调用`maven-surefire-plugin`的`test`目标来...
### Maven3实战笔记05仓库依赖解析与插件解析 #### 一、Maven仓库依赖解析 Maven 是一个项目管理和构建工具,它通过一种称为“仓库依赖解析”的过程来管理项目的依赖关系。仓库依赖解析是指Maven如何查找并解决...
本文将深入探讨Maven仓库的相关知识,包括其分类、作用以及如何配置和使用。 #### 1. Maven仓库分类 Maven仓库主要分为本地仓库、中央仓库和远程仓库。 - **本地仓库**:位于开发者的计算机上,Maven默认的本地...
### Maven3实战笔记02:项目需求和模块分析 在Maven3的实战学习中,第二部分着重于项目需求分析与模块划分,这是构建大型、复杂项目时的基础工作,能够帮助开发者更好地理解项目架构,合理分配资源,提高开发效率。...
0.0.1:8443/svn/mysvn/mysrc/01-OpenSource/maven/MavenAccount-aggregator</url></scm>3. Maven 项目站点详解Maven 的项目站点功能是一个强大的文档生成工具,它可以帮助开发者生成项目相关的各种报告,包括但不...