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