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