junit基礎

cactusz發表於2017-07-06

 

JUnit 4 使用 Java 5 中的註解(annotation),以下是JUnit 4 常用的幾個 annotation 介紹
@Before:初始化方法
@After:釋放資源
@Test:測試方法,在這裡可以測試期望異常和超時時間
@Ignore:忽略的測試方法
@BeforeClass:針對所有測試,只執行一次,且必須為static void
@AfterClass:針對所有測試,只執行一次,且必須為static void
一個JUnit 4 的單元測試用例執行順序為:
@BeforeClass –> @Before –> @Test –> @After –> @AfterClass
每一個測試方法的呼叫順序為:
@Before –> @Test –> @After

 

@BeforeClass and @AfterClass @Before and @After
在一個類中只可以出現一次

在一個類中可以出現多次,即可以在多個方法的宣告前加上這兩個Annotaion標籤,執行順序不確定

方法名不做限制 方法名不做限制
在類中只執行一次 在每個測試方法之前或者之後都會執行一次

@BeforeClass父類中標識了該Annotation的方法將會先於當前類中標識了該Annotation的方法執行。
@AfterClass 父類中標識了該Annotation的方法將會在當前類中標識了該Annotation的方法之後執行

@Before父類中標識了該Annotation的方法將會先於當前類中標識了該Annotation的方法執行。
 @After父類中標識了該Annotation的方法將會在當前類中標識了該Annotation的方法之後執行
必須宣告為public static 必須宣告為public 並且非static
所有標識為@AfterClass的方法都一定會被執行,即使在標識為@BeforeClass的方法丟擲異常的的情況下也一樣會。 所有標識為@After 的方法都一定會被執行,即使在標識為 @Before 或者 @Test 的方法丟擲異常的的情況下也一樣會。

@BeforeClass 和 @AfterClass 對於那些比較“昂貴”的資源的分配或者釋放來說是很有效的,因為他們只會在類中被執行一次。相比之下對於那些需要在每次執行之前都要初始化或者在執行之後都需要被清理的資源來說使用@Before和@After同樣是一個比較明智的選擇。

 

Junit Assert超類所提供的8個核心方法

import static  org.junit.Assert.*;

  1.assertEquals ([String message],expected,actual):

           用來檢視物件中存的值是否是期待的值,與字串比較中使用的equals()方法類似;

    2.assertFalse ([String messag],boolean condition)

            assertTrue ([String messag],boolean condition):

           用來檢視變數是是否為false或true,如果assertFalse()檢視的變數的值是false則

           測試成功,如果是true則失敗,assertTrue()與之相反;

      3.assertSame ([String message],expected,actual)

            assertNotSame ([Spring message],expected,actual):

           用來比較兩個物件的引用是否相等和不相等,類似於通過“==”和“!=”比較兩個物件;

          (與equal有區別)

  4.assertNull ([String message],java.lang.Object object)

            assertNotNull ([String message],java.lang.Object object):

           用來檢視物件是否為空和不為空;

  5.fail ([String message]):

           意為失敗,用來丟擲錯誤。fail()一旦被執行,會立即中止測試,java虛擬機器不再執行任

          何別的程式碼,並且會丟擲  junit.framework.AssertionFailedError錯誤!我個人認為有

          兩個用途:首先是在測試驅動開發中,由於測試用例都是在被測試的類之前編寫的,而寫成

          時又不清楚其正確與否,此時就可以使用fail方法丟擲錯誤進行模擬;其次是丟擲意外的錯

         誤,比如要測試的內容是從資料庫中讀取的資料是否正確,而導致錯誤的原因卻是資料庫連

         接失敗,這樣便可以直接找出錯誤的根源。

          在入參上標有"[ ]"的是可以選的,加上這些會讓測試程式碼出錯時報出你設定的錯誤資訊。

 

 

7JUnit核心類之間的關係及生命週期




 

 

 

 

 

 

寫個例子測試一下,測試一下

 

package junit.text;


import org.junit.After;
import org.junit.AfterClass;
import org.junit.Assert;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Ignore;
import org.junit.Test;
public class Testago {
	@Before
	public void before() {
	  System.out.println("@Before");
	}
	@Test
	public void test() {
	  System.out.println("@Test1");
Assert.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)");//單位毫秒
      Assert.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

@Test1

@After

@AfterClass


 

 

 

 

  • a9cfc769-9e95-3c79-939a-0d2f49f1e5f2-thumb.jpg
  • 大小: 12.2 KB
  • 9c9be3cd-6857-3688-9471-16d8a2797ba6-thumb.jpg
  • 大小: 115.2 KB

相關文章