JUnit單元測試

簡介

JUnit是一個開源的java語言的單元測試框架
專門針對java語言設計, 使用最普遍, JUnit是標準的單元測試架構
java單元測試是最小的功能單元測試代碼, 單元測試就是針對單個java方法的測試
 

目的

  • 確保單個方法正常運行
  • 測試代碼能夠做爲示例代碼
  • 能夠自動化運行全部測試並得到報告
 

Maven依賴

<dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
</dependency>
 

項目結構


 

斷言

在 JDK 1.4 以後,Java 中增長了斷言的功能,關鍵字assert
 
斷言是java的一種語句,它容許對程序提出一個判斷(假設)。斷言包含一個布爾表達式,在程序運行中它應該是真。假設程序指望獲得某個結果,若是沒達成則報錯。斷言用於確保程序的正確性,避免邏輯錯誤。
 
與異常處理相似,斷言不能代替正常的檢驗,只是檢測內部的一致性和有效性。斷言在運行是檢驗,能夠在程序啓動時打開或關閉。
 
PS:不要在正常的業務邏輯中使用斷言。對於程序正確性的判斷能夠在測試環境使用斷言,生成環境則能夠關閉該功能。
 
指望以外的結果:
import org.junit.Assert; /** * @author wzm * @version 1.0.0 * @date 2020/1/24 15:25 **/
public class MyTest { private static void test(int x) { int c = 10 + 20; int a = 12 * 100 / x; Assert.assertTrue("expected a == c ,but a != c", a == c); System.out.println("a == c"); } public static void main(String[] args) { int x = 10; test(x); } }

 

報錯以下:java

 

指望的結果:
import org.junit.Assert; /** * @author wzm * @version 1.0.0 * @date 2020/1/24 15:25 **/
public class MyTest { private static void test(int x) { int c = 10 + 20; int a = 12 * 100 / x; Assert.assertTrue("expected a == c ,but a != c", a == c); System.out.println("a == c"); } public static void main(String[] args) { int x = 40; test(x); } }

運行結果:數據庫

 

斷言還有不少其餘方法。
assertTrue
 
assertFalse
 
assertEquals
 
assertNotEquals
 
assertArrayEquals
 
...

 

開啓斷言

 

 

 

在VM options中輸入-ea開啓斷言功能
 

junit註解

@Before:初始化測試資源
@After:釋放測試資源
@BeforeClass: 初始化很是耗時的資源, 例如建立數據庫
@AfterClass: 清理@BeforeClass建立的資源, 例如數據庫資源
@Test:執行測試的主體
 

執行順序

import org.junit.*; public class MyTestTest { public MyTestTest() { System.out.println("--new MyTestTest()"); } @BeforeClass public static void setUpBeforeClass() { System.out.println("--BeforeClass()"); } @AfterClass public static void tearDownAfterClass() { System.out.println("--AfterClass()"); } @Before public void setUp() { System.out.println("--Before()"); } @After public void tearDown() { System.out.println("--After()"); } @Test public void testA() { System.out.println("--testA()"); } @Test public void testB() { System.out.println("--testB()"); } @Test public void testC() { System.out.println("--testC()"); } }

 

運行整個類,執行結果:
 

 

 

運行單個測試testA:
 
 

超時測試

@Test(timeout=1000)能夠設置超時時間
timeout單位是毫秒
@Test(timeout = 1000) public void testA() { System.out.println("--testA()"); }

 

異常測試

異常測試能夠經過@Test(expected=Exception.class), 對可能發生的每種類型的異常進行測試
  • 若是拋出了指定類型的異常, 測試成功
  • 若是沒有拋出指定類型的異常, 或者拋出的異常類型不對, 測試失敗
 
運行以下代碼: 正常經過,證實 確實發生了ArithmeticException異常
@Test(expected = ArithmeticException.class)   public void testException() {   int i = 1 / 0; }

 

運行以下代碼: 有報錯信息,表明沒有報錯或者報的是其餘的錯誤。
@Test(expected = ArithmeticException.class)   public void testException() {   int i = 1 / 1; }
 
執行結果以下:
java.lang.AssertionError: Expected exception: java.lang.ArithmeticException
相關文章
相關標籤/搜索