對於Junit的總是一知半解不太懂,現在認真梳理一下;
此次針對的是Junit4版本,注解也是在Junit4版本才有的,之前的版本並無注解功能。而注解開發基本上被認為是一種優秀的設計,所以我們寫單元測試用例時,盡可能地去了解並使用注解。
@Test:使用該注解的方法為測試方法,自動運行時能夠識別並被執行
包含兩個參數:expected=XXXException.class 期望出現的異常
timeout=xxx 設定程序運行的超時時間
@Ignore:被忽略的測試方法
@Before:在每個測試方法之前運行
@After: 在每個測試方法之后運行
@BeforeClass:在所有測試開始之前運行
@AfterClass:在所有測試開始之后運行
注意:
(1) @Before與@BeforeClass的區別
@Before會加在每個方法前執行,即有幾個@Test就會執行幾遍。
@BeforeClass 只在所有測試之前執行,只會執行一次。並且@BeforeClass修飾的方法必須是公有的靜態方法(public static )。
@After和@AfterClass也類似
(2)每個測試類中這四個注解不能重復使用,一個方法只能從這四個注解中挑選其中一個。
重點:
(3)如果不希望某個方法執行:
@Ignore() 可以標注不參與測試的測試方法。當然也可以通過去除注解
@Test 來達到這個目的,但去除注解
@Test 會令到eclipse的JUnit View中無法顯示該測試方法。
比如:
package gc;
import static org.junit.Assert.*;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Ignore;
import org.junit.Test;
public class JUnit4Test {
@Before
public void before() {
System.out.println("@Before");
}
@Test
public void test() {
System.out.println("@Test");
assertEquals(5 + 5, 10);
}
@Ignore
@Test
public void testIgnore() {
System.out.println("@Ignore");
}
@Test(timeout = 50)
public void testTimeout() {
System.out.println("@Test(timeout = 50)");
assertEquals(5 + 5, 10);
}
@Test(expected = ArithmeticException.class)
public void testExpected() {
System.out.println("@Test(expected = Exception.class)");
throw new ArithmeticException();
}
@After
public void after() {
System.out.println("@After");
}
@BeforeClass
public static void beforeClass() {
System.out.println("@BeforeClass");
};
@AfterClass
public static void afterClass() {
System.out.println("@AfterClass");
};
};
結果為:
@BeforeClass
@Before
@Test(timeout = 50)
@After
@Before
@Test(expected = Exception.class)
@After
@Before
@Test
@After
@AfterClass