JUnit(>4.0)@BeforeClass、@Before、@Test、@After、@AfterClass、@Ignore
JUnit 4開始使用 Java 5 中的注解(annotation),常用的幾個 annotation 介紹:
@BeforeClass:針對所有測試,只執行一次,且必須為static void
@Before:初始化方法
@Test:測試方法,在這里可以測試期望異常和超時時間
@After:釋放資源
@AfterClass:針對所有測試,只執行一次,且必須為static void
@Ignore:忽略的測試方法
一個單元測試用例執行順序為:
@BeforeClass–> @Before –> @Test –> @After –> @AfterClass
每一個測試方法的調用順序為:
@Before–> @Test –> @After
以下是測試執行順序代碼:
public class CalculatorTest {
????private static Calculator calculator = new Calculator();
????@BeforeClass
????public static void beforeClass1(){
????????System.out.println("@beforeClass1");
????}
????@BeforeClass
????public static void beforeClass2(){
????????System.out.println("@beforeClass2");
????}
????@Before
????public void before1() throws Exception {
????????System.out.println("@before1");
????}
????@Before
????public void before2() throws Exception {
????????System.out.println("@before2");
????}
????@Test
????public void testAdd() {
????????System.out.println(1);
????}
????@Test
????public void testSubstract() {
????????System.out.println(2);
????}
????@Ignore("Multiply() Not yet implemented")
????@Test
????public void testMultiply() {
????????System.out.println(3);
????????fail("Not yet implemented");
????}
????@Test
????public void testDivide() {
????????System.out.println(4);
????}
????@Test(timeout = 1000)
????public void testSquareRoot() {
????????System.out.println(5);
????}
????@Test
????//@Test(expected = ArithmeticException.class)
????public void divideByZero() {
????????System.out.println(6);
????}
????@After
????public void after1(){
????????System.out.println("@after1");
????}
????@After
????public void after2(){
????????System.out.println("@after2");
????}
????@AfterClass
????public static void afterClass1(){
????????System.out.println("@afterClass1");
????}
????@AfterClass
????public static void afterClass2(){
????????System.out.println("@afterClass2");
????}
}
執行結果:
@beforeClass2
@beforeClass1
@before2
@before1
1
@after1
@after2
@before2
@before1
2
@after1
@after2
@before2
@before1
4
@after1
@after2
@before2
@before1
5
@after1
@after2
@before2
@before1
6
@after1
@after2
@afterClass1
@afterClass2