1.Junit5註解
Junit Jupiter支持以下注釋,
用於配置測試和擴展測試框架。
除非另有說明,
所有的核心註釋都位於junit-jupiter-api模塊中的
org.junit.jupiter.api包中。
序號 | 註解 | 說明 |
---|---|---|
1 | @Test |
表示方法是測試方法,與Junit4的@Test不同,不能聲明任何屬性,因爲JUnit Jupiter中的測試擴展需要通過專用的註解。 |
2 | @ParameterizedTest |
表示方法是參數化測試。 |
3 | @RepeatedTest |
表示方法是可以按照指定次數重複執行。 |
4 | @TestFactory |
表示方法是動態測試的測試工廠。 |
5 | @TestTemplate |
表示方法是測試用例的模板,用於支持多次調用,調用的次數取決於調用上下文返回的註冊提供者。 |
6 | @TestClassOrder |
用於@Nested註解的測試類,可以配置測試類執行順序。 |
7 | @TestMethodOrder |
用於爲測試類配置測試方法執行順序;類似於Junit4的@FixMethodOrder。 |
8 | @TestInstance |
用於爲測試類配置測試實例生命週期。 |
9 | @DisplayName |
爲測試類或測試方法聲明自定義的展示名稱。 |
10 | @DisplayNameGeneration |
爲測試類聲明一個自定義的顯示名稱生成器。 |
11 | @BeforeEach |
表示方法應該在當前類中每個 @Test, @RepeatedTest, @ParameterizedTest 或 @TestFactory 方法之前執行;類似於Junit4的@Before 。即在每個單元測試之前執行,如果測試類有n個測試方法,則被執行n次。 |
12 | @AfterEach |
表示方法應該在當前類中每個 @Test, @RepeatedTest, @ParameterizedTest 或 @TestFactory 方法之後執行;類似於Junit4的@After 。即在每個單元測試之後執行,如果測試類有n個測試方法,則被執行n次。 |
13 | @BeforeAll |
表示方法應該在當前類中的所有@Test,@RepeatedTest,@ParameterizedTest和@TestFactory方法之前執行;類似於Junit 4的@BeforeClass。這樣的方法是必須是靜態的,如果配合test instance lifecycle(per-class)使用,可以是非靜態的。方法只會執行一次。 |
14 | @AfterAll |
表示方法應該在當前類中的所有@Test,@RepeatedTest,@ParameterizedTest和@TestFactory方法之前執行;類似於Junit 4的@AfterClass。這樣的方法是必須是靜態的,如果配合test instance lifecycle(per-class)使用,可以是非靜態的。方法只會執行一次。 |
15 | @Nested |
表示測試類是非靜態的嵌套測試類。@BeforeAll和@AfterAll方法不能直接在@Nested測試類中使用,除非配合test instance lifecycle(per-class)使用。 |
16 | @Tag |
用於在類或方法上聲明用於過濾測試的標籤;類似於TestNG中的測試組或Junit 4中的Categories。 |
17 | @Disabled |
用於禁用一個測試類或測試方法;類似於JUnit 4的' @Ignore '。即執行單元測試時,會忽略對應的測試類或者測試方法。 |
18 | @Timeout |
用於測試方法、測試工廠、測試模板或生命週期方法,在其執行超過指定時間時失敗。 |
19 | @ExtendWith |
用於以聲明方式註冊擴展。 |
20 | @RegisterExtension |
用於通過字段以編程方式註冊擴展。 |
21 | @TempDir |
用於在生命週期方法或測試方法中通過字段注入或參數注入臨時目錄;位於org.junit.jupiter.api.io包。 |
另外還有一些註釋,
目前是實驗性的,
感興趣的請參考實驗API中的表格。
2.參數源註解
參數化測試使用@ParameterizedTest註解代替@Test,
可以使用不同的參數多次運行同一個測試方法。
但是必須至少聲明一個參數源,
然後在測試方法中使用這些參數。
配合@ParameterizedTest使用的參數源註解如下:
序號 | 註解 | 說明 |
---|---|---|
1 | @ValueSource |
最簡單的參數源。可以指定單個字面值數組,並且在參數化測試時提供單個參數。 |
2 | @NullSource |
爲參數化測試方法提供一個空參數,不能用於具有基本類型的參數。 |
3 | @EmptySource |
爲參數化測試方法提供一個空參數,用於以下類型的參數:java.lang.String, java.util.List, java.util.Set, java.util.Map, primitive arrays (比如 int[], char[][]等等), object arrays (比如String[], Integer[][]等等)。但是不支持這些類型的子類型。 |
4 | @NullAndEmptySource |
一個組合註釋,結合了@NullSource和@EmptySource的功能。 |
5 | @EnumSource |
提供了一種使用枚舉常量的方便方法。 |
6 | @MethodSource |
可以引用測試類或外部類的一個或多個工廠方法。 |
7 | @CsvSource |
可以用逗號分隔的值來表達參數列表(例如CSV字符串文字)。通過@CsvSource中的value屬性提供的每個字符串表示一個CSV行,並導致對參數化測試的一次調用。 |
8 | @CsvFileSource |
使用類路徑或本地文件系統中CSV文件(逗號分隔的)作爲參數源,文件中的每一行都會導致對參數化測試的一次調用。 |
9 | @ArgumentsSource |
可以用來指定一個自定義的、可重用的ArgumentsProvider。注意ArgumentsProvider的實現必須聲明爲頂級類或靜態嵌套類。 |
3.參考文章
該升級你的JUnit版本了——JUnit5基本介紹
Spring Boot 集成 JUnit5,更優雅單元測試
JUnit 5 User Guide