1、什麼是斷言
斷言(assert),是編程術語,表示為一些布爾表達式,程序員相信在程序中的某個特定點該表達式值為真,可以在任何時候啟用和禁用斷言驗證,因此可以在測試時啟用斷言而在部署時禁用斷言。
斷言的使用通常在單元測試中,使用斷言可以創建更穩定,品質更好且不易於出錯的代碼。
2、斷言特性:
前置條件斷言:代碼執行之前必須具備的特性
後置條件斷言:代碼執行之後必須具備的特性
前後不變斷言:代碼執行前後不能變化的特性
3、前置條件斷言
程序的業務邏輯處理,一般是有必須滿足的條件,才能進行對應的處理,否則就不能正確的執行。
而代碼開發中,如果不在業務處理前,對其所需的條件進行判定,則在後續中,就會出現各種隱患。
在PRD中,對於業務邏輯,也是有一定滿足條件才能執行的。
在敏捷開發中,TDD是其一項核心實踐。
在測試用例中,對於測試場景來說,也是應有前置條件的約束的。
那麼,綜上所訴,是不是在寫業務功能之前,進行斷言判斷呢?
答案是肯定的,進行前置條件斷言,不僅符合業務實際,也對代碼規範進行了約束,同時,也會避免大量的不必要的隱患。
在項目中,我們通過在應用接口層進行對外交互。那麼對應的,條件斷言,也應在這裡進行。
我們假設,進行斷言,如果不通過,則拋異常碼,並且顯示在返回結果中。
那麼,首先,應定義全局異常碼,在項目中,每個碼都應唯一併且有確定的含義。
在全局異常碼,可以根據業務,進一步分為錯誤碼,轉向提示碼。
錯誤碼,很容易理解,他的信息可以由用戶或上游調用方顯示看到。
轉向提示碼,則是需要根據碼,可以進行一些對應業務處理,比如,用戶登錄信息session超時,可以使用轉向提示碼,通知上游,直接轉向登錄頁面。
4、斷言執行流程
接下來,我們可以簡單的嘗試一下做個斷言工具類 AssertUtils。
public class AssertUtils {
/**
* check if source is equals target.<p>
* if source == null && target == null,will not throws Exception
* @param code
* @param source
* @param target
*/
public static void eq(int code,Object source,Object target) {
boolean eq = false;
eq = source == null ? target == null ? true : false : target == null ? false : source.equals(target) ;
if(!eq)
ExceptionUtils.throwSimpleEx(code);
} }
ExceptionUtils是自定義異常Utils,裡面對異常進行了封裝,並且對code進行了配置註冊。
在使用上,我們可以這樣來使用:
int a1 = 12;
Integer a2 = 123;
AssertUtils.eq(1401,a1,a2);
就對a1和a2進行了相等的斷言,不符合,則拋出1401的異常碼。
作者:宜信技術學院 weiwei