junit入门
一、简介JUnit
JUnit是一个开源的java单元测试框架。在1997年,由 Erich Gamma 和 Kent Beck 开发完成。这两个牛人中 Erich Gamma 是 GOF 之一;Kent Beck 则在 XP 中有重要的贡献(你觉得眼熟一点都不奇怪)。
正如常言道:“麻雀虽小,五脏俱全。” JUnit设计的非常小巧,但是功能却非常强大。
什么是单元测试?
写了个类,要给别人用,会不会有bug?怎么办?测试一下。
用main方法测试好不好?不好!
1. 不能一起运行!
2. 大多数情况下需要人为的观察输出确定是否正确
为什么要进行单元测试?
1. 重用测试,应付将来的实现的变化。
2. 提高士气,明确知道我的东西是没问题的。
下面是JUnit一些特性的总结:
1) 提供的API可以让你写出测试结果明确的可重用单元测试用例
2) 提供了三种方式来显示你的测试结果,而且还可以扩展
3) 提供了单元测试用例成批运行的功能
4) 超轻量级而且使用简单,没有商业性的欺骗和无用的向导
5) 整个框架设计良好,易扩展
对不同性质的被测对象,如Class,Jsp,Servlet,Ejb等,Junit有不同的使用技巧。由于本文的性质,以下仅以Class测试为例。
下面我们就开始学习JUnit!
二、下载JUnit.jar和hamcrest.jar
许多IDE都自带了JUnit,但是并不推荐使用, 我们自己动手下载Jar包(不推荐使用的原因后面会说明)
点击http://www.junit.org可以下载到最新版本的JUnit,目前最新版本是4.11。进入官网选择Download and Install guide,
然后选择Plain-old JAR下的junit.jar,找到最新的4.11版本,下载jar包.
点击http://code.google.com/p/hamcrest/downloads/list下载最新的hamcrest-1.3.zip,解压.找到hamcrest-core-1.3.jar
然后在项目中引用junit-4.11.jar和hamcrest-core-1.3.jar,这样你就可以使用JUnit编写单元测试代码了.
三、简单的例子
记得在几乎每本语言教学书上都能找到HelloWorld这个入门代码。今天在这里,我们也从一个简单到根本不用单元测试的例子入手。四则运算。
第一步:建立项目引用junit-4.11.jar和hamcrest-core-1.3.jar
第二步:编写Calculator类,代码如下:
- package com.zjw.junit4;
- public class Calculator {
- public int plus(int x, int y) {
- return x + y;
- }
- public int subtraction(int x, int y) {
- return x - y;
- }
- public int multiplication(int x, int y) {
- return x * y;
- }
- public int division(int x, int y) {
- return x / y;
- }
- }
第三步:编写单元测试类,代码如下:
- package com.zjw.junit4.test;
- import static org.junit.Assert.*; //注意这边,静态导入
- import org.junit.Ignore;
- import org.junit.Test;
- import com.zjw.junit4.Calculator;
- public class TestCalculator {
- @Test
- public void testPlus() {
- Calculator cal = new Calculator();
- assertEquals(cal.plus(5, 5), 10);
- }
- @Test
- public void testSubtraction() {
- Calculator cal = new Calculator();
- assertEquals(cal.subtraction(5, 5), 0);
- }
- @Ignore
- @Test
- public void testMultiplication() {
- Calculator cal = new Calculator();
- assertTrue(cal.multiplication(5, 5) > 20);
- }
- @Test(expected = java.lang.ArithmeticException.class, timeout = 50)
- public void testDivision() {
- Calculator cal = new Calculator();
- assertEquals(cal.division(8, 0), 4); //大家注意看,除数是0
- }
- }
第四步:测试,在这里,我用的是MyEclipse,在TestCalculator类上右键找到Run As 下的JUnit Test,点击然后就开始测试了
第五步:观察测试结果,在这里我测试都是正确的,我们来分析测试结果和代码:
1. Failure是指测试失败
2. Error是指测试程序本身出错
3. 由于我在testMultiplication方法上加了@Ignore 所以该方法会被忽略
4. testDivision为什么报测试异常?
- @Test(expected = java.lang.ArithmeticException.class, timeout = 50)
看这个@Test expected后面指定你希望抛出的异常,timeout的意思是 如果测试没有在50ms内完成,那么就算测试失败.
5. 大家有没有觉得在每个测试方法下都new一个Calculator对象很浪费资源,假如有80个测试方法呢?所以接下来我们要使用@BeforeClass,代码如下:
- package com.zjw.junit4.test;
- import static org.junit.Assert.*;
- import org.junit.BeforeClass;
- import org.junit.Ignore;
- import org.junit.Test;
- import com.zjw.junit4.Calculator;
- public class TestCalculator {
- private static Calculator cal;
- @BeforeClass
- public static void beforeClass(){ //静态方法
- cal=new Calculator();
- }
- @Test
- public void testPlus() {
- assertEquals(cal.plus(5, 5), 10);
- }
- @Test
- public void testSubtraction() {
- assertEquals(cal.subtraction(5, 5), 0);
- }
- @Ignore
- @Test
- public void testMultiplication() {
- assertTrue(cal.multiplication(5, 5) > 20);
- }
- @Test(expected = java.lang.ArithmeticException.class, timeout = 50)
- public void testDivision() {
- assertEquals(cal.division(8, 0), 4);
- }
- }
为什么@BeforeClass下的方法必须是静态的?因为它在类初始化之前就运行了 .
为什么需要@BeforeClass,因为有的测试需要在测试之前需要取得一些很耗费时间的资源或者要搭建比较耗时间的环境例如建立数据库连接,搭建数据库连接池.
与之对应的还有@AfterClass,用于释放资源,这边我就不写了.
四、JUnit的Annoation:
1. @Test: 测试方法
a) (expected=XXException.class)
b) (timeout=xxx)
2. @Ignore: 忽略测试方法
3. @Before: 每一个测试方法之前运行
4. @After: 每一个测试方法之后运行
5. @BeforeClass: 所有测试开始之前运行,别忘了方法是静态的.
6. @AfterClass: 所有测试结束之后运行
五、注意
a) 测试类放在test包中
b) 类名用TestXXX
c) 方法用test方法名命名
六、总结
本文简单的介绍了JUnit使用的入门知识,以后会讲同时测试多个类以及JUnit4的新特性...
未完待续...
junit入门的更多相关文章
- JUnit 入门
JUNIT了解学习 转自:关于Java单元测试,你需要知道的一切 转自:JUnit 入门教程 JUnit高级用法之@RunWith @RunWith 关于@RunWith注解,官方文档是这么描述的: ...
- [置顶] JUnit入门教程(二)
一:介绍 接着上次的课程,今天我们学习JUnit4的新特性 assertThat()方法,这种方式和其余的assert方法比起来,更加接进英语. 二:分析API API中的例子: 参数 T Actua ...
- Android接口测试-JUnit入门
1.下载:http://www.junit.org 2.配置AndroidManifest.xml,在application节点加入 <!--使用单元测试库--> <u ...
- Junit 入门使用教程
1.Junit 是什么? JUnit是一个Java语言的单元测试框架.它由Kent Beck和Erich Gamma建立,逐渐成为源于Kent Beck的sUnit的xUnit家族中最为成功的一个JU ...
- 【软件测试】Junit入门
写在前面:本博客为本人原创,严禁任何形式的转载!本博客只允许放在博客园(.cnblogs.com),如果您在其他网站看到这篇博文,请通过下面这个唯一的合法链接转到原文! 本博客全网唯一合法URL:ht ...
- Android JUnit 入门指南
自动化单元测试可以做许多的事,并帮你节省时间.它也可以被用作快速检验新建工程或进行冒烟测试.始终,单元测试是作为一种有效的.系统的检验应用程序各功能执行的方式.Android SDK支持JUnit的自 ...
- Junit入门教程
做开发的时候,完成一个接口.方法.函数或者功能等,需要测试,是否有bug,有逻辑错误.这里有两种方案测试 1. 在main中写测试方法 2. 使用开源框架,这里使用的junit main写测试方法优点 ...
- Ant, JUnit以及Sonar的安装+入门资料
Ant 感觉是个和Make/Grunt类似的东东,build一个项目用的.安装很容易,跟装JDK类似,就是解压->设环境变量->没了.注意装之前要先确认Java装好了(有点废话). 下载地 ...
- Java Junit测试框架
Java Junit测试框架 1.相关概念 Ø JUnit:是一个开发源代码的Java测试框架,用于编写和运行可重复的测试.它是用于单元测试框架体系xUnit的一个实例(用于java语言).主要 ...
随机推荐
- selenium在Eclipse中打开fireFox浏览器是报报错connect to host 127.0.0.1 on port 7055
1.相信很多同学刚接触selenium时,在Eclipse中打开fireFox浏览器是报报错: org.openqa.selenium.firefox.NotConnectedException: U ...
- asp.net mvc 缓存
webConfig 里面配置缓存时间 <caching> <outputCacheSettings> <outputCacheProfiles> <add n ...
- 写出3种遍历一个list的方法,(使用for循环)
for(String s : list){ System.out.print(s+"/t"); } for(int i = 0;i<list.size();i++){ Sys ...
- css-IE中的border-radius和box-shadow
1.今天遇到一个问题,在给一个图片设置border-radius时,firefox和chrome表现正常,但是在IE中就无效,在IE中必须给图片设置一个边框,比如设置一个透明的边框就可以正常显示. 2 ...
- 【poj3261】 Milk Patterns
http://poj.org/problem?id=3261 (题目链接) 题意 给出n个数和k,求在给出的数中,最长的出现至少k次的可重叠子串. solution 后缀数组论文题,感觉分组思想可能会 ...
- Spring MVC exception - Invoking request method resulted in exception : public static native long java.lang.System.currentTimeMillis()
最近在线上系统发现下面的异常信息: 2014-10-11 11:14:09 ERROR [org.springframework.web.servlet.mvc.annotation.Annotati ...
- 企业应用系统设计分享PPT
因今天上午需要为团队做一个分享,所以昨晚连夜写了一个<企业应用系统设计>的PPT,因为时间比较短,写的比较急.现在把PPT贴出来,做一个记录.同时也希望对大家有用. 文件我上传到了百度网盘 ...
- Npoi实现Excel绘制功能
使用Npoi操作Excel,是我一直很喜欢的一种方式. 说简单也简单,但是封装好重用性,易用性,也稍稍费了些时间.在这里做个记录,免得以后遗忘. 首先说一下需求,需求有两点 1.新建Excel,并下载 ...
- AlsaInfo
这是一个不能不说的故事. 我装了Ubuntu以后,耳机一直不能用. 查了各种资料也搞不定. DEBUG声音问题时有一个重要的参考就是AlsaInfo,里面详细列出了关于声音的各种配置信息. 如何获得这 ...
- AngularJs ngCsp、ngFocus、ngBlur、ngForm
ngCsp 处理CSP(上下文安全策略)的支持. 当开发如google浏览器的扩展时候这个就必须使用. CSP禁止应用程序使用eval和Function(string)生成的函数.如果我们需要兼容,我 ...