当前位置: 首页 > article >正文

【测试】——JUnit

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

在这里插入图片描述


目录

  • 🕒 1. 添加依赖
  • 🕒 2. 注解
    • 🕘 2.1 @Test
    • 🕘 2.2 @BeforeAll @AfterAll
    • 🕘 2.3 @BeforeEach @AfterEach
    • 🕘 2.4 @Disabled
  • 🕒 3. 参数化
    • 🕘 3.1 单参数
    • 🕘 3.2 多参数
      • 🕤 3.2.1 CSV
      • 🕤 3.2.2 方法
  • 🕒 4. 测试用例的执行顺序
    • 🕘 4.1 默认顺序
    • 🕘 4.2 指定顺序
    • 🕘 4.3 随机顺序
  • 🕒 5. 断言
  • 🕒 6. 测试套件

🕒 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
博客链接:🔎 作者博客主页


http://www.kler.cn/news/325359.html

相关文章:

  • 全网最全软件测试面试题(含答案解析+文档)
  • Unity 新NavMesh演示(1)
  • 如何在 Ubuntu 22.04 上使用 Browserless?
  • CAD快捷键
  • CMMI认证的好处
  • 在Vue.js中,你可以使用Element UI的el-input组件结合计算属性来实现模糊查询
  • list模拟实现(部分)
  • 统一建模语言(UML)在软件研发过程中常用图接受:类图、用例图、时序图、状态图、活动图、流程图、顺序图
  • 【在Linux世界中追寻伟大的One Piece】命名管道
  • 探索词向量的奥秘:自然语言处理的基石
  • 【SOP】Windows下安装Neo4j流程
  • 头歌 应用密码学实验(1-3实验代码)
  • iOS 项目中的多主题颜色设计与实现
  • python股票因子,交易所服务器宕机,量化交易程序怎么应对
  • docker和ufw冲突问题
  • 【黑马软件测试一、二】软件测试基础与Linux、数据库
  • CFR( Java 反编译器)---> lambda 表达式底层实现机制
  • 【计算机网络】网络层详解
  • 解决Pymysql has no attribute ‘escape_string‘ 并且无法引入该模块
  • 爱速搭百度低代码开发平台
  • 视频汇聚EasyCVR视频监控平台调取接口提示“认证过期”是什么原因?
  • 通信工程师笔记
  • 生成对抗网络(Generative Adversarial Networks, GANs)
  • Pymsql 插入数据时报错 Unkown column xxxx in field list
  • 昇思MindSpore进阶教程--轻量化数据处理
  • 【HTTPS】中间人攻击和证书的验证
  • 手写SpringMVC
  • Subdominator:一款针对漏洞奖励计划的子域名安全枚举工具
  • Rustrover2024.2 正式发布:个人非商用免费,泰裤辣
  • 更新日志-Python OS