Junit4学习笔记一

      Junit4是Junit框架有史以来的最大改进,其主要目标是利用java5的Annotation特性来简化测试用例的编写。Junit4的官方网址是http://www.junit.org/

   Junit依赖反射来执行每个以test开头的方法,然而在Junit4中,由于有了Annotation的支持,测试方法不需要再以testXXX标示了,而是写上一个@Test标注即可。例如:

    

 

@Test
	public void add(){
		assertEquals("不相等","1","1");
		
	}

 

 

 

 Junit4中测试类不需要继承自TestCase。不继承TestCase就无法调用assertXXX方法了,正因为如此,所有的assertXXX方法全部以静态方法被放入了Assert类,使用Assert.assertXXX()调用。使用方法是

 

import static org.junit.Assert.*;

 

 setUp()和tearDown()方法也依赖@Before和@After标记,这样做的最大的好处是在继承体系内不必担心忘记了在setUp()方法中调用父类的super.setUp()方法,JUnit框架会自动处理父类的@Before和@After标记的方法。

并且,JUnit框架对@Before和@After的调用顺序类似于类的构造方法和析构方法,即@Before按照父类到子类的顺序调用,@After则相反,这样保证了资源的正确获取和释放。

当然,不再强迫必须使用setUp和tearDown作为方法名,可以使用更有意义的方法名,例如:initDatabase()和closeDatabase(),只要它们被标注了@Before和@After即可。

@Before
	public void test1(){
		System.out.println("开始初始化----");
	}

	@After
	public void test2(){
		System.out.println("销毁资源----");
	}

 

 

JUnit 4另一个较大的变化是引入了@BeforeClass和@AfterClass,它们在一个Test类的所有测试方法执行前后各执行一次。这是为了能在@BeforeClass中初始化一些昂贵的资源,例如数据库连接,然后执行所有的测试方法,最后在@AfterClass中释放资源。

正如你能想到的,由于@BeforeClass和@AfterClass仅执行一次,因此它们只能标记静态方法,在所有测试方法中 共享的资源也必须是静态引用:
     

	@BeforeClass
	public static void  test11(){
		System.out.println("所有方法调用前要做的事情");
	}

@AfterClass
	public static  void test22(){
		System.out.println("所有方法测试完后要调用的");
	}

 

Junit4可以使用expected=Exception.class来期待一个预期的异常,而不必编写

try{

    fail("No exception")

}catch(Exception e){

   //Ok

}

例如:测试数组长度越界的异常。

@Test(expected= IndexOutOfBoundsException.class) 
	public void empty() {
		System.out.println("IndexOutOfBoundsException");
	    new ArrayList<Object>().get(0); 
	}

 

对于非常耗时的测试,@Test还有一个timeout来标识该方法最长执行时间,超过此时间即表示该测试方法失败:

 @Test(timeout=1) 
	 public void infinity() {
	       while(true);
	  }

 

以上方法若执行时间超过1ms则测试失败,由于依赖CPU的执行速度,在不同的机器上测试结果也不同。

 

运行多个测试用例:

JUnitCore.runClasses(MyTest.class);

 

runClasses方法的参数可以写多个测试类的class

 

 

 

 下面是一个简单的测试用例。

package com.amc.purview.action;
import static org.junit.Assert.*;

import java.util.ArrayList;

import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;


public class MyTest {
	@Before
	public void test1(){
		System.out.println("开始初始化----");
	}
	@BeforeClass
	public static void  test11(){
		System.out.println("所有方法调用前要做的事情");
	}
	
	@Test
	public void add(){
		assertEquals("不相等","1","1");
		
	}
	@Test
	public void add2(){
		System.out.println("测试用例2");
		assertEquals("不相等","1","1");
		
	}
	@Test(expected= IndexOutOfBoundsException.class) 
	public void empty() {
		System.out.println("IndexOutOfBoundsException");
	    new ArrayList<Object>().get(0); 
	}
	 @Test(timeout=1) 
	 public void infinity() {
	       while(true);
	  }


	@After
	public void test2(){
		System.out.println("销毁资源----");
	}
	
	@AfterClass
	public static  void test22(){
		System.out.println("所有方法测试完后要调用的");
	}

}

 

 

运行测试用例:

 

package com.amc.purview.action;

import junit.framework.JUnit4TestAdapter;

import org.junit.runner.JUnitCore;

public class MyTest3 {
	public static void main(String[] args) {
		JUnitCore.runClasses(MyTest.class);
		System.out.println();
		//MyTest3.suite();
	}

	public static junit.framework.Test suite() { 
	    return new JUnit4TestAdapter(MyTest.class); 
	}

}

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值