没有合适的资源?快使用搜索试试~ 我知道了~
JUnit4是JUnit框架有史以来的最大改进,其主要目标便是利用Java5的Annotation特性简化测试用例的编写。
资源详情
资源评论
资源推荐
JUnit4 概述
JUnit4 是 JUnit 框架有史以来的最大改进,其主要目标便是利用 Java5 的 Annotation 特性简
化测试用例的编写。
先简单解释一下什么是 Annotation,这个单词一般是翻译成元数据。元数据是什么?元数
据就是描述数据的数据。也就是说,这个东西在 Java 里面可以用来和 public、static 等关键
字一样来修饰类名、方法名、变量名。修饰的作用描述这个数据是做什么用的,差不多和
public 描述这个数据是公有的一样。想具体了解可以看 Core Java2。废话不多说了,直接
进入正题。
我们先看一下在 JUnit 3 中我们是怎样写一个单元测试的。比如下面一个类:
public class AddOperation {
public int add(int x,int y){
return x+y;
}
}
我们要测试 add 这个方法,我们写单元测试得这么写:
import junit.framework.TestCase;
import static org.junit.Assert.*;
public class AddOperationTest extends TestCase{
public void setUp() throws Exception {
}
public void tearDown() throws Exception {
}
public void testAdd() {
System.out.println(\"add\");
int x = 0;
int y = 0;
AddOperation instance = new AddOperation();
int expResult = 0;
int result = instance.add(x, y);
assertEquals(expResult, result);
}
}
可以看到上面的类使用了 JDK5 中的静态导入,这个相对来说就很简单,只要在 import 关
键字后面加上 static 关键字,就可以把后面的类的 static 的变量和方法导入到这个类中,调
用的时候和调用自己的方法没有任何区别。
我们可以看到上面那个单元测试有一些比较霸道的地方,表现在:
1.单元测试类必须继承自 TestCase。
2.要测试的方法必须以 test 开头。
如果上面那个单元测试在 JUnit 4 中写就不会这么复杂。代码如下:
import junit.framework.TestCase;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import static org.junit.Assert.*;
/**
*
* @author bean
*/
public class AddOperationTest extends TestCase{
public AddOperationTest() {
}
@Before
public void setUp() throws Exception {
}
@After
public void tearDown() throws Exception {
}
@Test
public void add() {
System.out.println(\"add\");
int x = 0;
int y = 0;
AddOperation instance = new AddOperation();
int expResult = 0;
int result = instance.add(x, y);
assertEquals(expResult, result);
}
}
我们可以看到,采用 Annotation 的 JUnit 已经不会霸道的要求你必须继承自 TestCase 了,而
且测试方法也不必以 test 开头了,只要以@Test 元数据来描述即可。
从上面的例子可以看到在 JUnit 4 中还引入了一些其他的元数据,下面一一介绍:
@Before:
使用了该元数据的方法在每个测试方法执行之前都要执行一次。
@After:
使用了该元数据的方法在每个测试方法执行之后要执行一次。
注意:@Before 和@After 标示的方法只能各有一个。这个相当于取代了 JUnit 以前版本中
的 setUp 和 tearDown 方法,当然你还可以继续叫这个名字,不过 JUnit 不会霸道的要求你
这么做了。
@Test(expected=*.class)
在 JUnit4.0 之前,对错误的测试,我们只能通过 fail 来产生一个错误,并在 try 块里面
assertTrue(true)来测试。现在,通过@Test 元数据中的 expected 属性。expected 属性的值
是一个异常的类型
@Test(timeout=xxx):
该元数据传入了一个时间(毫秒)给测试方法,
如果测试方法在制定的时间之内没有运行完,则测试也失败。
@ignore:
该元数据标记的测试方法在测试中会被忽略。当测试的方法还没有实现,或者测试的方法
已经过时,或者在某种条件下才能测试该方法(比如需要一个数据库联接,而在本地测试
的时候,数据库并没有连接),那么使用该标签来标示这个方法。同时,你可以为该标签
传递一个 String 的参数,来表明为什么会忽略这个测试方法。比如:@lgnore(“该方法还没
有实现”),在执行的时候,仅会报告该方法没有实现,而不会运行测试方法。
在 Eclipse 中使用 JUnit4 进行单元测试(初级篇)
我们在编写大型程序的时候,需要写成千上万个方法或函数,这些函数的功能可能很强大
但我们在程序中只用到该函数的一小部分功能,并且经过调试可以确定,这一小部分功能
是正确的。但是,我们同时应该确保每一个函数都完全正确,因为如果我们今后如果对程
序进行扩展,用到了某个函数的其他功能,而这个功能有 bug 的话,那绝对是一件非常郁
闷的事情。所以说,每编写完一个函数之后,都应该对这个函数的方方面面进行测试,这
样的测试我们称之为单元测试。传统的编程方式,进行单元测试是一件很麻烦的事情,你
要重新写另外一个程序,在该程序中调用你需要测试的方法,并且仔细观察运行结果,看
看是否有错。正因为如此麻烦,所以程序员们编写单元测试的热情不是很高。于是有一个
牛人推出了单元测试包,大大简化了进行单元测试所要做的工作,这就是 JUnit4。本文简
要介绍一下在 Eclipse3.2 中使用 JUnit4 进行单元测试的方法。
首先,我们来一个傻瓜式速成教程,不要问为什么,Follow Me,先来体验一下单元测试的
快感!
首先新建一个项目叫 JUnit_Test,我们编写一个 Calculator 类,这是一个能够简单实现加减
乘除、平方、开方的计算器类,然后对这些功能进行单元测试。这个类并不是很完美,我
们故意保留了一些 Bug 用于演示,这些 Bug 在注释中都有说明。该类代码如下:
package andycpp;
public class Calculator ...{
private static int result; // 静态变量,用于存储运行结果
public void add(int n) ...{
result = result + n;
}
public void substract(int n) ...{
result = result - 1; //Bug: 正确的应该是 result =result-n
}
public void multiply(int n) ...{
} // 此方法尚未写好
public void divide(int n) ...{
result = result / n;
}
public void square(int n) ...{
result = n * n;
}
public void squareRoot(int n) ...{
for (; ;) ; //Bug : 死循环
}
public void clear() ...{ // 将结果清零
result = 0;
}
public int getResult() ...{
return result;
}
}
第二步,将 JUnit4 单元测试包引入这个项目:在该项目上点右键,点“属性”,如图:
剩余20页未读,继续阅读
cjh_85
- 粉丝: 0
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0