今天正好遇到了,就記一下
一.作用:
僅用與編寫單元測試, 一般不用於生產環境
assert 理論上和 if 類似, 但是assert 僅僅用於測試, 不能用於業務
from jdk 1.4
二.assert 關鍵字(Java斷言)
1. 使用斷言
要添加斷言,只需使用assert關鍵字並為其賦予布爾條件
boolean dd = false;
try {
assert dd == true;
} catch (AssertionError e) {
System.out.println(e.getMessage()); // null
e.printStackTrace();
}
boolean dd = false;
try {
assert dd == true : " dd is false";
} catch (AssertionError e) {
System.out.println(e.getMessage()); // dd is false
e.printStackTrace();
}
斷言將拋出一個異常信息用於構造 AssertionError
2. AssertionError處理
注意這個拋出的是Error , 而不是被捕獲的 Exception, 因此不需要嘗試捕獲(try catch)
AssertionError extends Error
3. 在IDE中啟用斷言
如果發現斷言無效, 則可能時ide沒配置 😂
需要配置VM參數
-
eclipse:
-
idea:
三.JUnit 斷言
幾個方法:
- void assertEquals(boolean expected, boolean actual)
檢查兩個變量或者等式是否平衡 - void assertTrue(boolean expected, boolean actual)
檢查條件為真 - void assertFalse(boolean condition)
檢查條件為假 - void assertNotNull(Object object)
檢查對象不為空 - void assertNull(Object object)
檢查對象為空 - void assertSame(boolean condition)
assertSame() 方法檢查兩個相關對象是否指向同一個對象 - void assertNotSame(boolean condition)
assertNotSame() 方法檢查兩個相關對象是否不指向同一個對象 - void assertArrayEquals(expectedArray, resultArray)
assertArrayEquals() 方法檢查兩個數組是否相等
四、使用斷言
1.可以在預計正常情況下程序不會到達的地方放置斷言 :assert false
2.斷言可以用於檢查傳遞給私有方法的參數。(對於公有方法,因為是提供給外部的接口,所以必須在方法中有相應的參數檢驗才能保證代碼的健壯性)
3.使用斷言測試方法執行的前置條件和后置條件
4.使用斷言檢查類的不變狀態,確保任何情況下,某個變量的狀態必須滿足。(如age屬性應大於0小於某個合適值)
不用斷言
斷言語句不是永遠會執行,可以屏蔽也可以啟用
因此:
1.不要使用斷言作為公共方法的參數檢查,公共方法的參數永遠都要執行
2.斷言語句不可以有任何邊界效應,不要使用斷言語句去修改變量和改變方法的返回值.