1. 程式人生 > 其它 >Junit5快速入門指南-3

Junit5快速入門指南-3

Fixtures 是測試中非常重要的一部分。他們的主要目的是建立一個固定/已知的環境狀態以確保 測試可重複並且按照預期的方式執行。比如在app測試中

基類@BeforeClass 配置初始化,初始化driver,安裝啟動app等,基類@AfterClass 退出前清理環境

public class Junit5Demo_Fixtures {

    @BeforeAll
    static void beforeAll() {
        System.out.println("Father BeforeAll 執行了!");
    }

    @BeforeEach
    void beforEach() {
        System.out.println("Father BeforeEach 執行了!");
    }

    @AfterEach
    void afterEach() {
        System.out.println("Father AfterEach 執行了!");
    }

    @AfterAll
    static void afterAll() {
        System.out.println("Father AfterAll 執行了!");
    }
    
    @Test
    void testMethod01() {
        System.out.println("Father testMethod01 執行了!");
    }

    @Test
    void testMethod02() {
        System.out.println("Father testMethod0102 執行了!");
    }
}

測試執行結果

子類繼承父類測試方法執行順序,相同優先順序,父類先進,子類先出

public class Junit5Demo_Fixtures1 extends Junit5Demo_Fixtures {
    @BeforeAll
    static void childBeforeAll() {
        System.out.println("child BeforeAll 執行了!");
    }

    @AfterAll
    static void childAfterAll() {
        System.out.println("child AfterAll 執行了!");
    }


    @BeforeEach
    void childBeforEach() {
        System.out.println("child BeforEach 執行了!");
    }

    @AfterEach
    void childAfterEach() {
        System.out.println("child AfterEach 執行了!");
    }

    @Test
    void childTestMethod01() {
        System.out.println("child TestMethod01 執行了!");
    }

    @Test
    void childTestMethod02() {
        System.out.println("child TestMethod02 執行了!");
    }


}

assertAll()實現1個用例中多個斷言,實現斷言失敗仍然會繼續下一個斷言

@Test  // 錯誤後依然繼續執行
public void addTest() {
    int resultPass = Calculator.add(4,2);
    int resultFail = Calculator.add(4,2);
    int result = Calculator.add(4,2);
    System.out.println("add:" + result);
    assertAll(("計算結果:"),
            ()->assertEquals(6,resultPass),
            ()->assertEquals(7,resultFail),
            ()->assertEquals(8,result));
}

@nest巢狀測試模擬支付購買流程

public class LoginAndBuy {
    //存放資料的變數datamap
    private static HashMap<String,Object> datamap=new HashMap<String,Object>();
    @Test
    void Login(){
        datamap.put("login","success");
        System.out.println("使用者登入狀態為"+datamap.get("login"));
    }
    @Nested
    @DisplayName("第二個執行")
    class pay{
        @Test
        void paytest(){
          if (StringUtils.isNotEmpty((CharSequence) datamap.get("buy"))){
                System.out.println("正在支付...");
                System.out.println(datamap.get("buy"));
            }else {
                System.out.println("尚未購買???????????");
            }
        }
    }
    @Nested  //使用nested 進行業務流測試
    @DisplayName("第一次執行")
    class Buy{
        @Test
        void buyTest(){
            // 判斷使用者是否登入成功
            if (datamap.get("login").equals("success")){
                System.out.println("使用者登入成功可以購買");
                datamap.put("buy","ok");
                System.out.println("giao"+datamap.get("buy"));
            }else {
                System.out.println("使用者未登入成功,請先登入");
            }
        }
    }

執行結果: