請牢記這一條 JUnit 最佳實踐:測試任何可能的錯誤。單元測試不是用來證明您是對的,而是為了證明您沒有錯。
啊哈,再次運行測試,綠條又重現眼前。通過對 WordDealUtil.wordFormat4DB 比較全面的單元測試,現在的代碼已經比較穩定,可以作為 API 的一部分提供給其它模塊使用了。
不知不覺中我們已經使用 JUnit 漂亮的完成了一次單元測試?梢泽w會到 JUnit 是多么輕量級,多么簡單,根本不需要花心思去研究,這就可以把更多的注意力放在更有意義的事情上——編寫完整全面的單元測試。
JUnit 深入
當然,JUnit 提供的功能決不僅僅如此簡單,在接下來的內容中,我們會看到 JUnit 中很多有用的特性,掌握它們對您靈活的編寫單元測試代碼非常有幫助。
Fixture
何謂 Fixture?它是指在執行一個或者多個測試方法時需要的一系列公共資源或者數據,例如測試環境,測試數據等等。在編寫單元測試的過程中,您會發現在大部分的測試方法在進行真正的測試之前都需要做大量的鋪墊——為設計準備 Fixture 而忙碌。這些鋪墊過程占據的代碼往往比真正測試的代碼多得多,而且這個比率隨著測試的復雜程度的增加而遞增。當多個測試方法都需要做同樣的鋪墊時,重復代碼的“壞味道”便在測試代碼中彌漫開來。這股“壞味道”會弄臟您的代碼,還會因為疏忽造成錯誤,應該使用一些手段來根除它。
JUnit 專門提供了設置公共 Fixture 的方法,同一測試類中的所有測試方法都可以共用它來初始化 Fixture 和注銷 Fixture。和編寫 JUnit 測試方法一樣,公共 Fixture 的設置也很簡單,您只需要:
1.
使用注解 org,junit.Before 修飾用于初始化 Fixture 的方法。
2.
使用注解 org.junit.After 修飾用于注銷 Fixture 的方法。
3.
保證這兩種方法都使用 public void 修飾,而且不能帶有任何參數。
遵循上面的三條原則,編寫出的代碼大體是這個樣子:
//初始化Fixture方法 @Before public void init(){……} //注銷Fixture方法 @After public void destroy(){……}
這樣,在每一個測試方法執行之前,JUnit 會保證 init 方法已經提前初始化測試環境,而當此測試方法執行完畢之后,JUnit 又會調用 destroy 方法注銷測試環境。注意是每一個測試方法的執行都會觸發對公共 Fixture 的設置,也就是說使用注解 Before 或者 After 修飾的公共 Fixture 設置方法是方法級別的(圖5)。這樣便可以保證各個獨立的測試之間互不干擾,以免其它測試代碼修改測試環境或者測試數據影響到其它測試代碼的準確性。
圖5 方法級別 Fixture 執行示意圖
圖5 方法級別 Fixture 執行示意圖
文章來源于領測軟件測試網 http://www.kjueaiud.com/