Junit單元測試—Maven

PromiseForYou發表於2024-10-17

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

  • 用途:用於設定測試方法名,便於針對性測試
  • 示例

斷言判斷:Assertions.assertEquals("預期值","實際值",提示資訊)

相關文章