前置條件斷言

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章