Assert.isTrue()方法用于斷言條件是否為真,如果條件不滿足(即為false),則會拋出IllegalArgumentException,并附帶預設的錯誤信息。在示例中,當1.23不小于2.23時,方法拋出了異常,顯示1.23小于2.23。此方法常用于單元測試中確保代碼行為符合預期。
Assert.isTrue(express,message) 是指測試指定的條件是否為True,如果為True,則測試通過,如果表達式express為false,則才輸出信息。?
示例代碼如下:
public class AssertDemo {public static void main(String[] args) {Double num = new Double(1.23);Assert.isTrue(num.compareTo(new Double(2.23)) == 1, "1.23小于2.23");}
}
運行結果如下:
Exception in thread "main" java.lang.IllegalArgumentException: 1.23小于2.23at org.springframework.util.Assert.isTrue(Assert.java:116)at org.sang.test.AssertDemo.main(AssertDemo.java:15)
我們查看下Assert.isTrue()源碼:
public static void isTrue(boolean expression, String message) {if (!expression) {throw new IllegalArgumentException(message);}}
發現,當expression為true時則通過,不發生異常,當expression為false時,則會拋出異常。
一、org.springframework.util.Assert斷言工具類
1 對象和類型斷言
notNull(Object object, String message)
:入參一定不是 null;isNull(Object object, String message)
:入參一定是 null;isInstanceOf(Class type, Object obj, String message)
:檢查對象必須為另一個特定類型的實例
public void сhangeEngine(Engine engine) {Assert.isInstanceOf(ToyotaEngine.class, engine);// ToyotaEngine 是類 Engine的子類,可以通過
}
isAssignable(Class superType, Class subType, String message)
:subType 必須可以按類型匹配于 superType
2 文本斷言
通常用來檢查字符串參數。
- hasLength(String text, String message):當 text 為 null 或長度為 0 時拋出異常,空格算長度為1;
- hasText(String text, String message):text 不能為 null 且必須至少包含一個非空格的字符,否則拋出異常;
兩者都區別:
hasLength(String text)文本為空格時不會拋出異常,但是hasText(String text)在空格的時候會拋出異常。
3 集合斷言
- ?notEmpty(Collection collection, String message):當集合未包含元素時拋出異常。
二、同一異常捕獲?
?因為Spring斷言機制都會對未通過判斷的地方拋出異常,所以,我們需要集中對這些異常進行捕獲處理。采用AOP的方式,部分示例代碼如下:
try {...} catch (IllegalArgumentException ill) {logger.error(ill.getMessage());;return null;} catch (Throwable throwable) {logger.error(throwable.getMessage());return null;}