原創|行業資訊|編輯:鄭恭琳|2020-05-19 11:17:50.563|閱讀 260 次
概述:自JUnit 5發行以來已經有幾年了。如果您尚未開始將其用于開發測試,則應該這樣做。 JUnit 5具有許多新功能和改進功能,可以節省您的時間和麻煩。讓我們看一下如何開始使用JUnit 5以獲得最新技術的好處。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關鏈接:
自JUnit 5發行以來已經有幾年了。如果您尚未開始將其用于開發測試,則應該這樣做。 JUnit 5具有許多新功能和改進功能,可以節省您的時間和麻煩。讓我們看一下如何開始使用JUnit 5以獲得最新技術的好處。
如果您使用JUnit 4已有一段時間,那么遷移測試似乎是一項艱巨的任務。好消息是您可能不需要轉換任何測試——JUnit 5可以使用Vintage庫運行JUnit 4測試,因此您可以開始使用JUnit 5編寫新的測試。
這是開始使用JUnit 5的四個基本理由:
即使您已有現有的JUnit 4測試,從JUnit 4切換到JUnit 5也非常簡單。除非需要新功能,否則大多數組織不需要將舊的JUnit轉換為JUnit 5。
JUnit 5測試看起來與JUnit 4幾乎相同,但是您應該注意一些差異。
輸入
JUnit 5將新的org.JUnit.jupiter包用于其注釋和類。例如,org.JUnit.Test成為org.JUnit.jupiter.api.Test。
注解
@Test注釋不再具有參數;這些都已移至某個功能。例如,要指示期望測試在JUnit 4中引發異常:
在JUnit 5中,它已更改為:
同樣,超時也已更改。在JUnit 4中,它們如下所示:
在JUnit 5中,超時如下所示:
以下是其他已更改的注釋:
斷言類
JUnit 5斷言類現在位于org.JUnit.jupiter.api.Assertions中。大多數常見的斷言類,例如assertEquals()和assertNotNull()看起來都與以前相同,但是有一些關鍵的區別:
請注意,如果愿意,您可以在JUnit 5測試中繼續使用來自JUnit 4的斷言。
假設條件
假設已移至org.JUnit.jupiter.api.Assumptions。
存在相同的假設,但現在支持BooleanSupplier以及Hamcrest匹配器以匹配條件。滿足條件時,可以使用Lambda(類型為Executable)來執行代碼。
這是JUnit 4中的示例:
在JUnit 5中,它變為:
在JUnit 4中,自定義框架通常意味著使用@RunWith批注指定自定義運行器。使用多個運行程序是有問題的,通常需要鏈接或使用@Rule。使用擴展在JUnit 5中對此進行了簡化和改進。
例如,在JUnit 4中使用Spring框架構建測試如下所示:
使用JUnit 5,您可以改為包含Spring Extension:
@ExtendWith注釋是可重復的,這意味著可以輕松組合多個擴展名。
您還可以通過創建一個實現org.JUnit.jupiter.api.extension中的一個或多個接口的類,然后使用@ExtendWith將其添加到我們的測試中,來輕松定義我們自己的自定義擴展。
要將現有的JUnit 3或JUnit 4測試轉換為JUnit 5,以下步驟應適用于大多數測試:
請注意,遷移參數化測試將需要更多的重構,尤其是如果您一直在使用JUnit 4參數化(JUnit 5參數化測試的格式更接近JUnitParams)。
到目前為止,我僅討論了現有功能及其更改方式。但是JUnit 5提供了許多新功能,使我們的測試更具描述性和可維護性。
顯示名稱
使用JUnit 5,可以將@DisplayName批注添加到類和方法。生成報告時使用該名稱,這使描述測試的目的以及跟蹤故障更加容易,例如:
您還可以使用顯示名稱生成器來處理您的測試類和/或方法以生成您喜歡的任何格式的測試名稱。有關詳細信息和示例,請參見JUnit文檔。
斷言
JUnit 5引入了一些新的斷言,例如:
嵌套測試
JUnit 4中的測試套件很有用,但是JUnit 5中的嵌套測試更易于設置和維護,它們可以更好地描述測試組之間的關系,例如:
在上面的示例中,您可以看到我對與MyClass相關的所有測試使用了單個類。我可以驗證該類在外部測試類中是否可實例化,并且我對所有實例化和初始化MyClass的測試使用嵌套的內部類。@BeforeEach方法僅適用于嵌套類中的測試。
測試和類的@DisplayNames批注指示測試的目的和組織。這有助于了解測試報告,因為您可以看到執行測試的條件(使用初始化驗證MyClass)以及測試正在驗證的內容(myMethod返回true)。這是用于JUnit 5的良好測試設計模式。
參數化測試
JUnit 4中使用內置庫(例如JUnit4Parameterized)或第三方庫(例如JUnitParams)進行測試參數化。在JUnit 5中,參數化測試是完全內置的,并采用了JUnit4Parameterized和JUnitParams的一些最佳功能,例如:
格式類似于JUnitParams,其中參數直接傳遞到測試方法。請注意,要測試的值可以來自幾個不同的來源。在這里,我只有一個參數,因此使用@ValueSource很容易。@EmptySource和@NullSource表示我想分別向運行的值列表添加一個空字符串和一個null(如果同時使用它們,則可以如上所述將它們組合在一起)。還有多個其他值源,例如@EnumSource和@ArgumentsSource(自定義值提供程序)。如果需要多個參數,則也可以使用@MethodSource或@CsvSource。有關更多詳細信息和示例,請參見JUnit 5文檔。
JUnit 5中添加的另一種測試類型是@RepeatedTest,其中將單個測試重復指定的次數。
有條件的測試執行
JUnit 5提供了ExecutionCondition擴展API,以有條件地啟用或禁用測試或容器(測試類)。這就像在測試中使用@Disabled一樣,但是它可以定義自定義條件。有多個內置條件,例如:
測試模板
測試模板不是常規測試。它們定義了一組要執行的步驟,然后可以使用特定的調用上下文在其他位置執行這些步驟。這意味著您可以一次定義一個測試模板,然后在運行時構建一個調用上下文列表以運行該測試。在Junit 5文檔中找到更多詳細信息和示例。
動態測試
動態測試就像測試模板一樣,要運行的測試是在運行時生成的。但是,雖然測試模板是通過一組特定的步驟定義的并且可以多次運行,但是動態測試使用相同的調用上下文,但是可以執行不同的邏輯。動態測試的一種用途是流式傳輸抽象對象列表,并根據其具體類型對每個對象執行一組獨立的斷言。有關良好的示例,請參見Junit 5文檔。
JUnit 5是對JUnit框架的強大而靈活的更新。它提供了各種改進和新功能來組織和描述測試用例,并有助于理解測試結果。更新JUnit 5既快速又容易——只需更新項目依賴項并開始使用新功能。
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn