[跟著官方文檔學JUnit5][二][WritingTests][學習筆記]
以下示例提供了在JUnit Jupiter中編寫測試的最少要求。
package com.example.util; public class Calculator { public int add(int number1, int number2) { return number1 + number2; } }
package com.example; import com.example.util.Calculator; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.*; public class MyFirstJUnitJupiterTests { private final Calculator calculator = new Calculator(); @Test void addition() { assertEquals(2, calculator.add(1, 1)); } }
1.注解總覽
JUnit Jupiter支持以下用于配置測試和拓展框架的注解。除非另外說明,所有核心注解都位于org.junit.jupiter.api包中,這個包在junit-jupiter-api模塊中。
2.元注解和組合注解
JUnit Jupiter注解可以用作元注解。意味著可以定義自己的組合注解,該注解將自動繼承其元注解的語義。
比如,你可以創建名的為@Tag(“fast”)的自定義組合注解,而不是整個代碼庫中復制和粘貼@Tag(“fast”),如下所示。然后@Fast可以用作@Tag(“fast”)的直接替代品。
import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; import org.junit.jupiter.api.Tag; @Target({ElementType.TYPE, ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME) @Tag("fast") public @interface Fast { }
下面這個@Test方法描述了@Fast注解的用法
@Fast @Test void myFastTest(){ //... }
3.測試類和方法
測試類:任何包含至少一個測試方法的頂級類、靜態成員類或@Nested類。測試類不能是抽象的,并且必須具有單個構造函數。
測試方法:使用@Test、@RepeatedTest、@ParameerizedTest、@TestFactory或@TestTemplate直接注解或元注解的任何實例方法。
生命周期方法:使用@BeforeAll、@AfterAll、@BeforeEach或@AfterEach直接注解或元注解的任何方法。
測試方法和生命周期方法可以在當前測試類中本地聲明,從超類繼承,也可以從接口繼承(參考測試接口和默認方法)。此外,測試方法和生命周期方法不得抽象,并且不得返回值(返回值所需的@TestFactory方法除外)。
類和方法的可見性:測試類、測試方法和生命周期方法不要求public,但不能為private。通常建議省略測試類、測試方法和生命周期方法的public修飾符,除非有技術原因這樣做。例如,當一個測試類被另一個包中的測試類拓展時。類和方法加上public的另一個技術原因是,在使用Java模塊系統時,簡化模塊路徑上的測試。
以下的測試類演示了使用@Test方法和所有受支持的生命周期方法。更多信息在測試執行順序和回調包裝行為。
例子:設定為測試不通過
import org.junit.jupiter.api.*; import static org.junit.jupiter.api.Assertions.*; import static org.junit.jupiter.api.Assumptions.*; class StandardTests { @BeforeAll static void initAll() { } @BeforeEach void init() { } @Test void succeedingTest() { } @Test void failingTest() { fail("a failing test"); } @Test @Disabled("for demonstration purposes") void skippedTest(){ //not executed } @Test void abortedTest() { assumeTrue("abc".contains("Z")); fail("test should have been aborted"); } @AfterEach void tearDown() { } @AfterAll static void tearDownAll() { } }
輸出結果
例子:設定為測試通過
import org.junit.jupiter.api.*; import static org.junit.jupiter.api.Assertions.*; import static org.junit.jupiter.api.Assumptions.*; class StandardTests { @BeforeAll static void initAll() { } @BeforeEach void init() { } @Test void succeedingTest() { } @Test void failingTest() { //fail("a failing test"); } @Test @Disabled("for demonstration purposes") void skippedTest(){ //not executed } @Test void abortedTest() { assumeTrue("abc".contains("c")); //fail("test should have been aborted"); } @AfterEach void tearDown() { } @AfterAll static void tearDownAll() { } }
輸出結果
Java junit
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。