📖 前言:JUnit 是一个流行的 Java 测试框架,主要用于编写和运行单元测试,用来管理测试用例。本文采用JUnit 5

目录
🕒 1. 添加依赖
🔎 junit-jupiter-api依赖链接

🕒 2. 注解
🕘 2.1 @Test
这样就不需要main方法就能运行了
import org.junit.jupiter.api.Test;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
public class JUnitTest {
    @Test
    // @Test 表明当前的方法是一个测试用例
    void test01(){
        WebDriver webDriver = new ChromeDriver();
        webDriver.get("https://www.baidu.com/");
    }
}
🕘 2.2 @BeforeAll @AfterAll
@BeforeAll
// 当前所有的测试用例执行之前执行这个方法
static void setUp(){
    System.out.println("开始执行 @BeforeAll 修饰的方法");
}
@AfterAll
// 当前所有的测试用例执行之后执行这个方法
static void tearDown(){
    System.out.println("开始执行 @AfterAll 修饰的方法");
}
在UI自动化测试中,通常情况下,创建驱动,打开网页,放到BeforeAll里面;关闭浏览器放到AfterAlI
🕘 2.3 @BeforeEach @AfterEach
@BeforeEach
// 当前每个测试用例执行之前执行这个方法
void boforeTest(){
    System.out.println("开始执行 @BeforeEach 修饰的方法");
}
@AfterEach
// 当前每个测试用例执行之后执行这个方法
void afterTest(){
    System.out.println("开始执行 @AfterEach 修饰的方法");
}
🕘 2.4 @Disabled
忽略当前测试用例(当前这个测试用例不执行)
🕒 3. 参数化
参数化中有单参数、多参数、CSV、方法。
🔎 junit-jupiter-params依赖链接
🕘 3.1 单参数
@ParameterizedTest
    @ValueSource(strings = {"1","2","3"})
    void oneParameter(String str){
        System.out.println(str);
    }

注意,以下两个注解不能同时用来修饰一个方法。
@Test
@ParameterizedTest
🕘 3.2 多参数
🕤 3.2.1 CSV
@ParameterizedTest
@CsvSource({"1, 2, ''"})
void csvTest(String x,String y,String q){
    System.out.println(x);
    System.out.println(y);
    System.out.println(q);		// 空参数
    System.out.println("================");
}

@ParameterizedTest
@CsvFileSource(resources = "test01.csv")
void csvTest(int id,String name){
    System.out.println("id:" + id + ",name:" + name);
}

🕤 3.2.2 方法
public static Stream<Arguments> Generator() {
    return Stream.of(Arguments.arguments(1,"小张"),
            Arguments.arguments(2,"小李")
    );
}
// 注册参数
@ParameterizedTest
@MethodSource("Generator")
void methodTest(int num,String name){
    System.out.println(num + ":" + name);
}

🕒 4. 测试用例的执行顺序
🕘 4.1 默认顺序
public class JunitTest02 {
    @Disabled
    // 忽略当前测试用例(当前这个测试用例不执行)
    @Test
    void test01(){
        WebDriver webDriver = new ChromeDriver();
        webDriver.get("https://www.baidu.com/");
    }
    @Test
    void test02(){
        System.out.println("这是第2个测试用例");
    }
    @Test
    void test03(){
        System.out.println("这是第3个测试用例");
    }
    @Test
    void test04(){
        System.out.println("这是第4个测试用例");
    }
}

 可以看到是从上往下执行的,那么此时我们改变一下测试用例的顺序,将test04放到前面:

可以看到依旧是原先的顺序,是因为JUnit有自己的一套固定顺序。
那么,如何根据指定的顺序来执行测试用例呢?
🕘 4.2 指定顺序
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class JunitTest02 {
    @Disabled
    // 忽略当前测试用例(当前这个测试用例不执行)
    @Test
    void test01(){
        WebDriver webDriver = new ChromeDriver();
        webDriver.get("https://www.baidu.com/");
    }
    @Order(1)
    @Test
    void test02(){
        System.out.println("这是第2个测试用例");
    }
    @Test
    void test03(){
        System.out.println("这是第3个测试用例");
    }
    @Order(2)
    @Test
    void test04(){
        System.out.println("这是第4个测试用例");
    }
}

 可以看到,我们是通过注解 @TestMethodOrder(MethodOrderer.OrderAnnotation.class) 设定为根据指定的顺序来执行测试用例,通过 @Order 来指定具体的测试用例执行的顺序,没有被 @Order修饰的测试用例默认最后执行。
🕘 4.3 随机顺序
@TestMethodOrder(MethodOrderer.Random.class)
public class JunitTest02 {
    @Disabled
    // 忽略当前测试用例(当前这个测试用例不执行)
    @Test
    void test01(){
        WebDriver webDriver = new ChromeDriver();
        webDriver.get("https://www.baidu.com/");
    }
    @Order(1)
    @Test
    void test02(){
        System.out.println("这是第2个测试用例");
    }
    @Test
    void test03(){
        System.out.println("这是第3个测试用例");
    }
    @Order(2)
    @Test
    void test04(){
        System.out.println("这是第4个测试用例");
    }
}

可以看到每次执行的测试用例顺序不同,而且原先的 @Order 不生效。
🕒 5. 断言
@ParameterizedTest
@ValueSource(ints = {10})
void assertTest(int num){
    // 断言相等
    Assertions.assertEquals(num,10);
    // 断言不相等
    Assertions.assertNotEquals(num,11);
    // 断言为空
    Assertions.assertNull(num);
    // 断言不为空
    Assertions.assertNotNull(num);
}

🕒 6. 测试套件
测试套件:通过一段代码直接将所有的测试用例跑起来。
🔎 junit-platform-suite依赖链接
把<scope>test</scope>删去
🔎 jupiter-engine依赖链接
@Suite
@SelectClasses({JUnitTest.class,JunitTest02.class})
public class RunSuite {
}
通过添加以上两个注解就可以将所有需要测试的类运行起来。

 执行指定的包:
@Suite
@SelectPackages({"Junitlearn","Junitlearn02"})
public class RunSuite {
}
OK,以上就是本期知识点“Junit”的知识啦~~ ,感谢友友们的阅读。后续还会继续更新,欢迎持续关注哟📌~
 💫如果有错误❌,欢迎批评指正呀👀~让我们一起相互进步🚀
 🎉如果觉得收获满满,可以点点赞👍支持一下哟~










