junit 的幾個註解

  在編碼的過程當中,須要單元測試,寫測試用例,junit就能派上用場。我如今把一個測試方法看成一個測試用例。
java

  在早期junit3中,須要繼承junit.framework.TestCase,這裏有諸多限制:好比測試的方法名必須以test開頭,setUp、tearDown方法名也是固定的。setUp、tearDown的用途就是統一給多個測試方法準備數據、清理現場,減小了重複工做,在測試術語中他們叫測試夾具。一個完整的測試用例:先執行setUp,再執行測試方法,最後執行tearDown。各個測試用例之間是沒有順序的。     
spring

  在如今的junit4中,擴展了幾個註解,不須要繼承junit.framework.TestCase單元測試

一、@BeforeClass:放在一個public static void方法上,這個方法最早執行,並且只執行一次。能夠用於加載一些靜態配置文件,環境設置等。測試

二、@AfterClass:放在一個public static void方法上,這個方法最後執行,並且只執行一次。可用於清理數據、環境等。在某些狀況下,環境的設置與清理只須要執行一次,能夠考慮使用@BeforeClass、@AfterClass,相對與@Before、@After來講,效率有所提升。ui

三、@Before:放在一個public void方法上,在每一個測試方法執行以前執行。通常的用途爲測試方法準備測試數據。編碼

四、@After:放在一個public void方法上,在每一個測試方法執行以後執行。通常的用途爲清理現場,不干擾下一個測試方法的執行。spa

五、@Test放在一個public void方法上,這是執行測試的方法,是測試主體
.net

六、@Ignore:能夠放在測試方法上,忽略該測試方法不執行;也能夠放在測試類上,整個測試類的全部測試方法將會忽略掉,不執行。code

七、@FixMethodOrder:放在測試類上。某些狀況下,若是須要測試方法按照必定的順序執行,能夠加上他。通常來講,測試方法之間是相互獨立的,沒有執行順序的要求。blog

八、@Parameters:放在一個public static方法上,並返回測試數據集合。在參數化測試中用到這個註解,配合@RunWith(Parameterized.class)一塊兒使用。詳細介紹見 junit4 測試參數化  

九、@SuiteClasses:放在測試類上。這裏的測試類用於組合其餘多個測試類一塊兒執行,好比如今有10個測試類,咱們想執行其中的3個測試類,這個註解就能夠知足咱們的要求。配合@RunWith(Suite.class)一塊兒使用。

十、@Category:放在測試方法或測試測試類上,配合@RunWith(Categories.class)、@SuiteClasses一塊兒使用;Categories也是一個Suite。和註解@SuiteClasses相似,不過@Category能夠更細粒度的控制組合,能夠按測試方法組合在一塊兒:好比A測試類有5個測試方法,B測試類有3個測試方法,@Category能夠組合A中的兩個方法、B中的一個方法。

十一、@RunWith:放在測試類上。通常咱們要用到junit的一些增強功能,須要用到他:好比組合測試@RunWith(Suite.class)、參數化測試@RunWith(Parameterized.class)、集成spring測試@RunWith(SpringJUnit4ClassRunner.class)等等。

十二、@Rule:規則註解,放在public屬性上,而且直接或者間接實現了org.junit.rules.TestRule,能夠靈活的定義一些規則:好比:org.junit.rules.ExpectedException可用於異常測試。詳細介紹見 junit4 測試異常

   雖然加註解的方法名能夠任意寫其餘合法的方法名,但最好仍是表意,便於閱讀理解

package cn.wonhigh.o2o.test;

import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.FixMethodOrder;
import org.junit.Ignore;
import org.junit.Test;
import org.junit.runners.MethodSorters;

// 指定測試方法的執行順序
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
public class Junit4Test {
	
	// 方法名任意
	@BeforeClass
	public static void setUpBeforeClass() throws Exception {
		System.out.println("最早執行");
	}
	
	// 方法名任意
	@AfterClass
	public static void tearDownAfterClass() throws Exception {
		System.out.println("最後執行");
	}
	
	// 方法名任意
	@Before
	public void setUp() throws Exception {
		System.out.println("在測試方法以前執行");
	}
	
	// 方法名任意
	@After
	public void tearDown() throws Exception {
		System.out.println("在測試方法以後執行");
	}
	
	// 方法名任意
	@Test
	public void method1() {
		System.out.println("測試方法1");
	}
	
	// 方法名任意
	@Test
	public void method2() {
		System.out.println("測試方法2");
	}

	// 該方法將被忽略調,不會執行
	@Ignore
	@Test
	public void method3() {
		System.out.println("測試方法3");
	}

}

輸出:

最早執行
在測試方法以前執行
測試方法1
在測試方法以後執行
在測試方法以前執行
測試方法2
在測試方法以後執行
最後執行
相關文章
相關標籤/搜索