通常來說,單元測試和開發人員相關度很高。中培《軟件自動化測試與持續集成》的劉老師認為,主要的原因是:根據定義,單元測試用于測試系統中與其他部分隔離、定義良好的部分。因此,它們比較容易編寫和使用。
許多構建系統已經內置對單元測試的支持,不用花費太大力氣就可以使用。
例如Maven,就有這樣的約定:描述如何寫測試才能讓構建系統找到測試、執行測試并最終準備報告結果。編寫測試基本上可以歸結為編寫測試方法,通過在源代碼加注解來標記它們。因為這些都是普通的方法,所以它們可以做任何事情,但是根據約定,應該編寫測試,這樣就不需要花費很大的力氣去運行。如果測試代碼開始需要復雜的設置和運行時依賴,我們處理的就不再是單元測試了。
這里單元測試和功能測試的差別很讓人困惑。通常來說,相同的底層技術,類庫會在單元測試和功能測試之間重復使用。
復用一般來說是一件好事情,因為它可以讓你工作在另一個領域時,從你的專業領域中獲益。盡管如此,還是會時不時地帶來困擾,你必須打起精神,花費一些力氣,確保你正在做正確的事情。
—般的JUnit和特殊的JUnit你需要一些東西去運行你的測試。JUnit是一個框架,它可以讓你在Java代碼中定義和運行測試。
JUnit屬于統稱為xUnit的測試框架家族。SUnit是這個家族的祖先,由Kent Beck在1998年為Smalltalk語言而設計。
JUnit是Java語言的測試框架,同樣想法被移植到了其他語言,如C#。C#對應的測試架毫無想象力地叫作NUnit。N來自.NET,微軟軟件平臺的名字。
在話題繼續之前,我們需要了解下面的命名法則。命名的法則不特定于JUnit,但是我們會用JUnit作為例子來熟悉涉及到的定義。
測試運行器( Test runner):測試運行器運行由xUnit框架定義好的測試。
JUnit可以通過命令行去運行單元測試,Maven使用的測試運行器叫作Surefire。
測試運行器也會同時收集和匯報測試結果。以Surefue為例,報告是XML格式的,并且可以被其他工具進一步處理,如可視化。
測試用例(Test case):測試用例是最基本類型的測試定義。
用不同的JUnit版本創建測試用例存在些許不同。在早期的版本中,需要從JUnit基類繼承,最近的版本中,只需要給測試方法添加注解。這樣的方式會更好些,因為Java不支持多繼承,而且你有可能想使用自己的繼承結構而不是JUnit的繼承結構。按照約定,Surefire也會定位類名前綴為TeSt的測試類。
測試夾具( Test fixt"res):測試夾具是測試用例可以依賴的一個已知狀態,可以使測試具有良好定義的行為。開發者有責任去實現這些測試夾具。測試夾具有時也被稱為測試上下文( test context)。
在JUnit中,你通常會使用@Before和@After注解去定義測試夾具。@Before,顧名思義,是在測試用例前運行,用于準備好整個環境。同理,如果有需要,用 @After來恢復成初始狀態。
有時,為了更好表意,@Before和@After也被命名為Setup和蠆eardovvn。因為使用了注解,在上下文中方法可以有最直觀的名字。
測試套件(TeMsuites):在測試套件中你可以將測試用例分組。測試套件通常是一組共享測試夾具的測試用例。
測試執行器(Test exeeUtion):測試執行器運行測試套件和測試用例。
這里結合了前面的所有方面。定位測試套件和測試用例,創建相關的測試夾具,然后運行測試用例。最后,收集和整理測試結果。
測試結果格式化工具( Test result formatter):測試結果格式化工具格式化測試輸出結果,方便人們閱讀。JUnit使用多種多樣的格式,可以被其他和JUnit沒有直接關聯的測試框架和格式化工具使用。所以,如果你的一些測試沒有使用任何的xUnit測試框架,你還是可以通過提供XML格式的測試結果,將其展示在Jenkins中。因為文件格式是XML,如果有必要,你也可以用自己的工具去生成。
斷言(Assertions):斷言是xUnit框架的一種構造,用來確保條件被滿足。如果條件沒有滿足,它會認為這是個錯誤,并且匯報這個測試錯誤。測試用例通常在斷言失敗時終止。
想了解更多IT資訊,請訪問中培偉業官網:中培偉業