Junit4快速入门及与Junit3的比较

此文章为转载
由于原文格式比较凌乱,因此对本文进行了修订。
 
 
标题:JUnit 4快速入门
地址:碧清的世界
作者:碧清
时间:2007.12.13 14:22
 
 
Junit 概念,原理这里就不说了,有兴趣的朋友可以查阅相关资料,这篇文章主要是为了快速给大家介绍一下junit4的使用 以及与 junit3的区别,这里默认大家对junit3已经有些理解了。

下面就开始吧:

1.先写个简单的被测试类:

package  test.junit;

public   class  BaseClass  {

  
public String method() {
    
return this.getClass().getName();
  }
 

}


2.对于这个类的unit测试,我们先看看在junit3中怎么进行测试的吧:


package  test.junit;

import  junit.framework.TestCase;   // 引入TestCase类

public   class  BaseClassTest  extends  TestCase  {  //类必须继承TestCase

  BaseClass baseClass; 

  
protected void setUp() throws Exception {
    
super.setUp();
    baseClass 
= new BaseClass();
  }


  
public void testMethod (){  //测试方法必须以test开头
    assertTrue(baseClass.method ().equals("test.junit.BaseClass"));  //通过assert*来检验

  }


}


通过上面这个类,我们对junit3进行一些总结:
(1). 必须引入类TestCase - import junit.framework.TestCase;
(2). 必须继承类TestCase - class BaseClassTest extends TestCase
(3). 测试方法必须以test开头 - public void testMethod ()
(4). 通过assert*方法来判断结果 - assertTrue(baseClass.method ().equals("test.junit.BaseClass"));


3. 下面来看看我们今天的主角junit4是怎么处理这些的吧: 

package  test.junit;

import  org.junit.Test;   // 引入Test类
import   static  org.junit.Assert. * ;   // 引入Assert.*包

public   class  BaseClassTestNew  {  //这里不用再继承TestCase类了。

  BaseClass baseClass 
= new BaseClass(); 

  @Test 
  
public void methodOne(){  //名字随便写,可以按你自己的爱好。但是必须以@Test开头
    
//还是以assert*来判断
    assertTrue(baseClass.methodOne().equals("test.junit.BaseClass"));
  }


}

看看多么的简洁,好像少了很多约束,下面通过和junit3的特性进行比较总结junit4的特性:

 JUnit3 JUnit4

必须引入类TestCase
import junit.framework.TestCase;

必须引入
import org.junit.Test;
import static org.junit.Assert.*;
必须继承类TestCase
class BaseClassTest extends TestCase
不需要
测试方法必须以test开头
public void testMethod ()
不需要,
但是类开始的时候要标记 @Test
通过assert*方法来判断结果
assertTrue(baseClass.method ().equals("test.junit.BaseClass"));

 从上面的对比,可以看出junit4与junit3的区别在于:去掉与类TestCase的偶联性,唯一触发TestCase的地方就是在@Test上。

 

4.以上就是junit4与junit3的区别与改进,下面再继续看看junit4有哪些新增加的功能吧:

(1). @Before 和 @After
类似于init() 和destory(),可以将一些初始化和释放工作放到这里面,每个类都只有一个@Before 和 @After。为了实现这个功能,我们将测试类修改如下:

 

import  org.junit.Test;
import   static  org.junit.Assert. * ;
// 新增加两个类
import  org.junit.Before;
import  org.junit.After;

public   class  BaseClassTestNew  {

  BaseClass baseClass ; 
//这里不用进行初始化 

  @Before 
  
public void runBeforeTest(){
    baseClass 
= new BaseClass();
  }


  @Test
  
public void method ()
    assertTrue(baseClass.method ().equals(
"test.junit.BaseClass"));
  }


  @After
  
public void runAfterTest(){
    baseClass.teardownList();
    baseClass 
= null;
  }


}


@Before 方法会在 @Test 之前进行,相反 @After 会在所有方法运行完进行。

Junit4同时还支持 @BeforeClass 和 @AfterClass,原理一样,大家可以参考相关资料。


(2).TimeOut 属性

Junit4支持timeout,运用如下:

a. 首先在被测试类中增加用于测试timeout的方法:

 

public   void  methodTimeOut()  {

  
try {
    Thread.sleep(
50);  //睡50ms
    System.out.println("methodTimeOut");
  }
 catch (InterruptedException e) {
    ...
  }


}


b.看看怎么测试这个方法:

@Test(timeout = 5 )
public   void  methodTimeOut() {
  baseClass.methodTimeOut();
}

1). 增加(timeout=5)这个设置项

2). 运行完 没有输出methodTimeOut,说明这个方法没有执行完,达到效果。

 

以上就是一部分junit4相关的东西,这里只是简单的入门,希望大家增加补充其他内容。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值