- 浏览: 562935 次
- 性别:
- 来自: 杭州
-
文章分类
- 全部博客 (340)
- Spring (4)
- Hibernate (2)
- Linux (34)
- Oracle (145)
- Eclipse (1)
- UML (1)
- HTML&&JAVASCRIPT (11)
- JAVA (33)
- 设计模式 (1)
- 版本控制 (1)
- wrap框架 (3)
- IBATIS (5)
- Ruby (1)
- DWR (1)
- MINA (11)
- JBPM (2)
- 缓存技术 (4)
- 网络 (3)
- 应用服务器 (1)
- GWT (5)
- 杂谈 (2)
- ICE (4)
- XML (2)
- ArcGis (2)
- Flex (8)
- junit单元测试 (1)
- SNMP (1)
- 存储 (1)
- office (1)
- MongoDB (0)
- Greenplum (3)
- 管理点滴 (1)
- C++ (6)
- 网络入门 (3)
- Tomcat (7)
- JMX (0)
- webservice (1)
- Oracle的10046事件 (1)
- Library cache内部机制详解 (1)
- expdp通过dblink来导入 (1)
最新评论
-
yuanliangding:
有没有关于mock的更多知识。
基于mock对象和JUnit框架简化Spring Web组件单元测试 -
saup007:
ssh端口不是22,怎么搞呢?
Greenplum 学习笔记 -
springmvc-freemarker:
java开源项目源码实例下载
Apache上全部JAVA开源项目简介 -
bobbell:
哇塞,你真厉害,整理的非常全面。我是一个java barcod ...
Greenplum 学习笔记 -
wsj55133245513324:
这不是bug,你将日志级别从debug提升到INFO 就好了 ...
Spring,smppapi,apache mina, ssl快速实现安全的smpp(5)
简介
JUnit是一个开源的java单元测试框架。在1997年,由 Erich Gamma 和 Kent Beck 开发完成。这两个牛人中 Erich Gamma 是 GOF 之一;Kent Beck 则在 XP 中有重要的贡献(你觉得眼熟一点都不奇怪)。
正如常言道:“麻雀虽小,五脏俱全。” JUnit设计的非常小巧,但是功能却非常强大。
下面是JUnit一些特性的总结:
1) 提供的API可以让你写出测试结果明确的可重用单元测试用例
2) 提供了三种方式来显示你的测试结果,而且还可以扩展
3) 提供了单元测试用例成批运行的功能
4) 超轻量级而且使用简单,没有商业性的欺骗和无用的向导
5) 整个框架设计良好,易扩展
对不同性质的被测对象,如Class,Jsp,Servlet,Ejb等,Junit有不同的使用技巧。由于本文的性质,以下仅以Class测试为例。
下面我们就叩开JUnit的大门吧!
二、下载
点击http://www.junit.org可以下载到最新版本的JUnit,本文使用的为3.8.1版。至于安装或者配置之类,你只需要轻松的将下载下来的压缩包中的jar文件,放到你工程的classpath中就可以了。
这样,你的系统中就可以使用JUnit编写单元测试代码了(是不是很简单)!
三、HelloWorld
记得在几乎每本语言教学书上都能找到HelloWorld这个入门代码。今天在这里,我们也从一个简单到根本不用单元测试的例子入手。这是一个只会做两数加减的超级简单的计算器(小学一年级必备极品)。代码如下:
- public class SampleCalculator {
- public int add(int augend, int addend) {
- return augend + addend;
- }
- public int subtration(int minuend, int subtrahend)
- {
- return minuend - subtrahend;
- }
- }
public class SampleCalculator { public int add(int augend, int addend) { return augend + addend; } public int subtration(int minuend, int subtrahend) { return minuend - subtrahend; }}
将上面的代码编译通过。下面就是我为上面程序写的一个单元测试用例:
//请注意这个程序里面类名和方法名的特征
- import junit.framework.TestCase;
- public class TestSample extends TestCase {
- public void testAdd() {
- SampleCalculator calculator = new SampleCalculator();
- int result = calculator.add(50, 20);
- assertEquals(70, result);
- }
- public void testSubtration() {
- SampleCalculator calculator = new SampleCalculator();
- int result = calculator.subtration(50, 20);
- assertEquals(30, result);
- }
- }
import junit.framework.TestCase;public class TestSample extends TestCase { public void testAdd() { SampleCalculator calculator = new SampleCalculator(); int result = calculator.add(50, 20); assertEquals(70, result); } public void testSubtration() { SampleCalculator calculator = new SampleCalculator(); int result = calculator.subtration(50, 20); assertEquals(30, result); }}
好了,在DOS命令行里面输入javac -classpath .;junit.jar TestSample.java 将测试类编译通过。然后再输入 java -classpath .;junit.jar junit.swingui.TestRunner TestSample 运行测试类,你会看到如下的窗口。
上图中,绿色说明单元测试通过,没有错误产生;如果是红色的,则就是说测试失败了。这样一个简单的单元测试就完成了,是不是很容易啊?
按照框架规定:编写的所有测试类,必须继承自junit.framework.TestCase类;里面的测试方法,命名应该以Test开头,必须是public void 而且不能有参数;而且为了测试查错方便,尽量一个TestXXX方法对一个功能单一的方法进行测试;使用assertEquals等junit.framework.TestCase中的断言方法来判断测试结果正确与否。
你可以对比着上面测试类中的实现来体会下规定——很简单!而且你在这个测试类中有加入多少个测试方法,就会运行多少个测试方法。
四、向前一步
学完了HelloWorld,你已经可以编写标准的单元测试用例了。但是还有一些细节,这里还要说明一下。不要急,很快的!
你在看上面的代码的时候,是不是注意到每个TestXXX方法中都有一条SampleCalculator初始化语句?这很明显不符合编码规范。你可能正要将它提取出来放到构造函数里面去。且慢!在JUnit中的初始化是建议在Setup方法中作的。JUnit提供了一对方法,一个在运行测试方法前初始化一些必备条件而另一个就是测试完毕后去掉初始化的条件(见下图)。
另外你是否注意到,上面弹出窗口的一个细节,在绿条下面有Errors、Failures统计。这两者有何区别呢?
Failures作为单元测试所期望发生的错误,它预示你的代码有bug,不过也可能是你的单元测试代码有逻辑错误(注意是逻辑错误)。Errors不是你所期待的,发生了Error你可以按照下面的顺序来检查:
检查测试所需的环境,如:数据库连接
检查单元测试代码
检查你的系统代码
五、成批运行test case
这是前面提到的JUnit特性之一。它方便于系统单元测试的成批运行。使用起来也是非常简单,先看下使用代码:
- import junit.framework.Test;
- import junit.framework.TestSuite;
- public class TestAll {
- public static Test suite() {
- TestSuite suite = new TestSuite("TestSuite Test");
- //添加junit测试类
- suite.addTestSuite(TestSample.class);
- return suite;
- }
- }
import junit.framework.Test;import junit.framework.TestSuite;public class TestAll { public static Test suite() { TestSuite suite = new TestSuite("TestSuite Test"); //添加junit测试类 suite.addTestSuite(TestSample.class); return suite; }}
这个测试程序的编译、运行,和上面TestSample的方式是一样的。
javac -classpath .;junit.jar TestAll.java
java -classpath .;junit.jar junit.swingui.TestRunner TestAll
怎么样?这样你在suite方法里面添加几个TestCase就会运行几个,而且它也可以添加TestSuite来将小一点的集合加入大的集合中来,方便了对于不断增加的TestCase的管理和维护。
呵呵,你觉得suite方法的作用是不是于java应用程序的main很类似?并且这里的suite必须严格遵守上面的写法!
六、TestRunner
在JUnit中已经给出了三种方式表示的TestRunner。你可以分别运行体验下他们的不同。
junit.swingui.TestRunner
junit.awtui.TestRunner
junit.textui.TestRunner
七、总结
本文轻松简要的介绍了JUnit使用的入门知识。完全没有涉及到深入的技巧和使用规范。而这些请关注我关于JUnit高级使用、JUnit源代码分析的文章。
说明:1、在Eclipse里有一个Junit视图,用起来更方便一些。
2、在继承了TestCase 的类中只有testXXX这种形式的方法会在junit时被执行,也就是说一定要按照这种方式定义。
3、在继承了TestCase 的类中有下面两种方法,一个是初始化,一个是彻销初始化。
Java代码
- protected void setUp(){
- 初始化…
- System.out.println("初始化…");
- }
- protected void tearDown(){
- 撤销初始化……
- System.out.println("结束");
- }
protected void setUp(){// 初始化… System.out.println("初始化…"); } protected void tearDown(){// 撤销初始化…… System.out.println("结束"); }
执行顺序:setUp方法->TestCase中的TestXXX方法一-->tearDown-->setUp方法->TestCase中的TestXXX方法二-->tearDown
发表评论
-
Apache上全部JAVA开源项目简介
2011-05-12 17:16 1940最近接触Jakarta-Common-BeanU ... -
主题:JAVA NIO 简介
2011-04-15 11:48 10031. 基本 概念 IO 是主存和外部设备 ( 硬盘、终端和 ... -
JNDI在Java EE中的应用
2011-04-01 15:52 1066一、JNDI在Java EE中的应用JNDI技术是Java E ... -
Spring使用Quartz调度器 实现时间点任务(Spring in Action中文版)
2011-03-10 14:08 10087.3.2 使用Quartz调度器 Quartz调度器为调度 ... -
一个分页控件,适合大数据量。可以替换ext的分页控件
2010-11-08 15:44 1131<!doctype html public " ... -
Java的java.nio.Buffer缓冲区基础
2010-10-30 11:02 745缓冲区基础 抽象类Buffer是java.nio包支持缓 ... -
NIO ByteBuffer使用方法
2010-10-30 10:48 1264缓冲区分配和包装 在能够读和写之前,必须有一个缓冲区,用静态方 ... -
What is a Java Thread and How does it work?
2010-10-21 14:27 1035A java thread is an execution c ... -
将标准的java程序封装为Windows下面的服务
2010-10-19 14:02 13421、首先到请下载最新版本的Java Service Wra ... -
HASH表原理
2010-09-19 16:43 884今天由于天气不好 ... -
使用Apache CXF创建Web Service
2009-12-30 09:30 926官方主页:http://cxf.apache.org/ ... -
java.io.File中的绝对路径和相对路径.
2009-11-12 11:26 5002File类是用来构造文件或文件夹的类,在其构造函数中要求传 ... -
JavaScript极速狂飙:大容量字符型数组的快速检索
2009-06-19 20:19 1124JavaScript 在大容量数组 ... -
谈谈JavaScript中的数组、集合及效率
2009-06-19 20:15 1157数组是JavaScript提供的一个内部对象,它是一个标准的集 ... -
log4jxml配置
2009-05-19 14:45 1166<?xml version="1.0 ... -
log4j日志配置
2009-05-19 11:54 945关键字: apache log4j 1、配置根Logg ... -
bat语法的用法
2009-05-15 14:13 1499首先,批处理文件是 ... -
JUnit学习笔记
2009-05-15 10:15 1453这是我在学习的过程中整理记录下来的,其中参考了网上许多文章 ... -
接口和抽象类的区别
2009-04-30 15:15 1425区别一,两者表达的概念不一样。抽象类是一类事物的高 ... -
如何Gwt中使用Session
2008-12-30 13:54 3198在GWT中可以直接使用session信息,只需要用r ...
相关推荐
JUnit 是一个广泛使用的开源Java测试框架,由Erich Gamma和Kent Beck开发,主要用于进行回归测试,确保代码在修改后仍能按预期工作。JUnit测试主要是白盒测试,因为程序员对被测试的软件内部结构有深入理解,能够...
【jUnit入门教程 - jUnit教程】 jUnit是一款广泛应用于Java编程语言的单元测试框架,它使得开发者能够方便地编写和执行针对代码功能的测试用例。本教程旨在为初学者提供一个jUnit的基础入门指南,帮助理解如何利用...
本文将深入探讨JUnit入门培训的关键概念和技术。 首先,我们要理解什么是Test Driven Development(TDD),即测试驱动开发。TDD是一种软件开发方法论,它提倡在编写实际业务代码之前先编写测试。通过这种方式,...
本资源“Junit入门练习代码”旨在帮助初学者掌握JUnit的基本概念和使用方法,通过实践来加深理解。下面我们将深入探讨JUnit的相关知识点。 1. **JUnit简介**:JUnit是Java语言中的一个开源测试框架,由Ernst Leiss...
JUnit入门全攻略 JUnit是一个广泛使用的开源Java测试框架,它为编写和执行可重复的单元测试提供了便利。作为xUnit架构的一部分,JUnit使得开发者能够轻松地编写和组织测试用例,确保代码的质量和稳定性。本文将详细...
【JUnit入门及应用】 JUnit是Java开发者常用的单元测试框架,它的主要目的是为了编写和执行可重复的测试,确保代码的质量和稳定性。作为一个开源项目,JUnit是xUnit家族的一员,适用于进行白盒测试和回归测试。 **...
### Junit入门培训资料(断言相关):深入解析与应用 #### Junit概述与重要性 JUnit,作为由Kent Beck和Erich Gamma共同开发的开源Java测试框架,已成为Java开发人员进行单元测试的首选工具。它不仅是Java编程语言...
这个“JUnit入门资料合集”看起来包含了多个部分,涵盖了从软件架构到内部机制,再到讲课文档的全面教程。 1. **软件架构**: JUnit的架构基于设计模式,主要是工厂模式和装饰器模式。它通过`Test`接口定义了测试...
《Junit 入门与提高实例代码》是针对Java开发者,特别是J2EE环境下的测试工程师的一份宝贵资源。这份资料旨在帮助初学者快速掌握Junit的使用,并通过实例提升测试技能,确保J2EE应用的质量和稳定性。下面将详细阐述...
这个"Junit入门实验"旨在帮助初学者理解和掌握JUnit的基本概念和使用方法。通过这个实验,你将学习如何设置测试环境,创建测试类,编写测试用例,并理解断言和异常处理。 1. **安装与引入JUnit** 在开始之前,你...
JUnit入门简介,初学JUnit适用,深入浅出,实例为证,
### JUnit入门教程知识点概述 #### 一、JUnit简介 - **定义**:JUnit是一种针对Java编程语言的单元测试框架。它在测试驱动开发(TDD)的发展中扮演了重要角色,并且是XUnit家族的一员,这个家族起源于JUnit。 - **...
JUnit 是一个广泛使用的Java编程语言的单元测试框架,它的主要目标是帮助开发者编写可重复运行的测试用例,以确保代码的正确性和稳定性。JUnit 的出现源于Erich Gamma和Kent Beck两位大师,他们是面向对象设计模式和...
### JUnit入门使用详解 #### 一、JUnit简介 JUnit 是 Java 社区中最著名的单元测试框架之一,自1997年由Erich Gamma和Kent Beck共同开发以来,已经成为Java开发者进行单元测试的标准工具。虽然JUnit的设计十分简洁...
总之,这个"junit入门资料"应该包含了一系列的实践示例和讲解材料,帮助你从零开始学习JUnit,逐步掌握单元测试的技巧和最佳实践,从而提升你的Java编程能力。通过深入学习和实践,你将能够有效地利用JUnit进行高...
### JUnit入门精讲 **一、JUnit概览** JUnit是一种强大的开源Java测试框架,专为软件开发者设计,旨在促进可重复使用的单元测试编写。它作为xUnit家族的一员,特别适用于Java语言,常用于白盒测试和回归测试,确保...