JUnit 單元測試常用註解
測試順序大概流程
//第一步: 建立測試類, 測試類的類名一般是: 被測試類類名 + Test
public class MathUtilsTest {
/*
第二步: 為了保證每個方法獨立, 為測試的每個方法單獨建立測試方法
測試方法要求(規格):
(1) 不能有引數
(2) 不能返回值
(3) 方法名建議: test+被測試的方法(遵循駝峰命名規範)
(4) 修飾符必須是public
*/
// 第三步: 為了保證每個測試方法都能夠獨立執行,需要加上一個註解@Test
/*
@Test : 可以讓測試方法獨立執行 (核心註解)
@Before(@BeforeEach): 在每個測試方法執行之前都執行一次
@After(@AfterEach): 在每個測試方法執行之後都執行一次
@BeforeClass(@BeforeAll): 在類載入的時候走一次(該註解修飾的測試方法必須是靜態方法)
@AfterClass(@AfterAll) : 在所有的測試方法走完之後走一次(同樣只能修飾靜態方法 就是靜態程式碼塊)
總結:
使用步驟:
(1) 導包
(2) 建立測試類:
類名要求: 要測試的類+Test
(3) 在測試類中定義測試方法
方法要求:
(1) 沒有返回值, 沒有引數
(2) 許可權修飾符必須是public
(3) 方法名要求:test+要被測試的方法名
(4) 抗上@Test即可
優點:
(1) 每個方法測試都單獨測試互不影響
(2) 自動化測試
(3) 能夠生成測試報告
(4) 還可以斷言Assert
*/
/*
斷言:所謂斷言:意思是程式設計師可以預測程式的執行結果,檢查程式的執行結果是否與預期一致。
由junit的Asset工具類實現
eg: Assset.assrtEquals("提示訊息",預期目標,實際結果);
*/
}
JUnit 是 Java 中最常用的單元測試框架,以下是一些常用的註解及其用法示例。
1. @Test
-
用途:標識一個方法為測試方法。
-
示例:
import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertEquals; public class MathUtilsTest { @Test public void testAdd() { MathUtils mathUtils = new MathUtils(); int result = mathUtils.add(2, 3); assertEquals(5, result, "2 + 3 應該等於 5"); } }
2. @BeforeEach
-
用途:在每個測試方法執行之前執行的方法,通常用於設定測試環境。
-
示例:
import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; public class MathUtilsTest { private MathUtils mathUtils; @BeforeEach public void setUp() { mathUtils = new MathUtils(); // 每個測試前建立新的 MathUtils 例項 } @Test public void testAdd() { assertEquals(5, mathUtils.add(2, 3)); } }
3. @AfterEach
-
用途:在每個測試方法執行之後執行的方法,通常用於清理測試環境。
-
示例:
import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.Test; public class MathUtilsTest { @AfterEach public void tearDown() { // 清理操作,例如關閉連線、釋放資源等 } @Test public void testAdd() { // 測試邏輯 } }
4. @BeforeAll
-
用途:在所有測試方法執行之前執行的方法,適用於靜態方法,通常用於一些昂貴的設定操作。
-
示例:
import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; public class MathUtilsTest { @BeforeAll public static void init() { // 進行全域性的設定操作,例如載入配置 } @Test public void testAdd() { // 測試邏輯 } }
5. @AfterAll
-
用途:在所有測試方法執行之後執行的方法,適用於靜態方法,通常用於清理全域性資源。
-
示例:
import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; public class MathUtilsTest { @BeforeAll public static void init() { // 全域性設定 } @AfterAll public static void cleanUp() { // 清理全域性資源 } @Test public void testAdd() { // 測試邏輯 } }
6. @Disabled
-
用途:標識一個測試方法(或類)為禁用,JUnit 不會執行該測試。
-
示例:
import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; public class MathUtilsTest { @Disabled("此測試暫時禁用") @Test public void testAdd() { // 此測試不會被執行 } }
7. @ParameterizedTest
-
用途:用於引數化測試,允許用不同的引數執行同一個測試方法。
-
示例:
import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.CsvSource; public class MathUtilsTest { @ParameterizedTest @CsvSource({ "1, 2, 3", "2, 3, 5", "4, 5, 9" }) public void testAdd(int a, int b, int expected) { MathUtils mathUtils = new MathUtils(); assertEquals(expected, mathUtils.add(a, b)); } }
8. @Nested
-
用途:用於組織測試,允許將測試分組在一起,便於維護和可讀性。
-
示例:
import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; public class MathUtilsTest { @Nested class AddTests { @Test public void testAddPositiveNumbers() { MathUtils mathUtils = new MathUtils(); assertEquals(5, mathUtils.add(2, 3)); } @Test public void testAddNegativeNumbers() { MathUtils mathUtils = new MathUtils(); assertEquals(-5, mathUtils.add(-2, -3)); } } }
9. @DisplayName
- 用途:用於設定測試方法名,便於針對性測試
- 示例: