自学内容网 自学内容网

【测试】——JUnit

📖 前言: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”的知识啦~~ ,感谢友友们的阅读。后续还会继续更新,欢迎持续关注哟📌~
💫如果有错误❌,欢迎批评指正呀👀~让我们一起相互进步🚀
🎉如果觉得收获满满,可以点点赞👍支持一下哟~

❗ 转载请注明出处
作者:HinsCoder
博客链接:🔎 作者博客主页


原文地址:https://blog.csdn.net/HinsCoder/article/details/142445395

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!