了解JUnit测试框架

news2024/11/27 18:52:00

作者:~小明学编程  

文章专栏:测试开发

格言:热爱编程的,终将被编程所厚爱。
在这里插入图片描述

目录

注解

@Test注释

@BeforeEach  

@BeforeAll

@ AfterEach

@AfterAll

断言

assertEquals / assertNotEquals

assertTrue / assertFalse

测试的执行顺序

测试套件Suite

添加类

添加包

参数化

单参数

多参数

动态参数


注解

首先给大家补充一下我们本章要使用的一些依赖。

    <dependencies>

        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter</artifactId>
            <version>5.8.2</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.junit.platform</groupId>
            <artifactId>junit-platform-suite</artifactId>
            <version>1.8.2</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.junit.platform</groupId>
            <artifactId>junit-platform-reporting</artifactId><version>1.8.2</version>
            <scope>test</scope>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-java -->
        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-java</artifactId>
            <version>4.0.0</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.6</version>
        </dependency>


    </dependencies>

@Test注释

一般情况下我们想要调用一个方法的时候需要通过main()方法,但是加上我们的@Test注解之后就可以直接的使用该方法了。

这里可以看到我们加上注解之后多了run()的接口。

    @Test
    void test1() {
        System.out.println("aaa");
    }
    @Test
    void test2() {
        System.out.println("bbb");
    }
    @Test
    void test3() {
        System.out.println("ccc");
    }

左边表示我们的测试顺利通过了。 

@BeforeEach  

@BeforeEach 注释意味着我们的每一个Test注释的方法执行之前都会先调用一次这个方法。

    @BeforeEach
    void test1() {
        System.out.println("aaa");
    }
    @Test
    void test2() {
        System.out.println("bbb");
    }
    @Test
    void test3() {
        System.out.println("ccc");
    }

@BeforeAll

该注释意味着我们所有的方法执行之前会先执行一遍该注释所修饰的方法。

    @BeforeAll
    static void test1() {
        System.out.println("aaa");
    }
    @Test
    void test2() {
        System.out.println("bbb");
    }
    @Test
    void test3() {
        System.out.println("ccc");
    }

@ AfterEach

@ AfterEach所修饰的方法会在每个@Test这样的方法修饰之后再去执行该注解修饰的方法。

    @BeforeEach
    void test1() {
        System.out.println("aaa");
    }
    @Test
    void test2() {
        System.out.println("bbb");
    }
    @Test
    void test3() {
        System.out.println("ccc");
    }
    @AfterEach
    void test4() {
        System.out.println("ddd");
    }

@AfterAll

在所有的测试方法之后来调用来方法,只执行一次。

    @BeforeEach
    void test1() {
        System.out.println("aaa");
    }
    @Test
    void test2() {
        System.out.println("bbb");
    }
    @Test
    void test3() {
        System.out.println("ccc");
    }
    @AfterAll
    static void test4() {
        System.out.println("ddd");
    }

断言

assertEquals / assertNotEquals

通过这两个方法我们可以比较我们要测试的目标和我们所预期的是否一致。

    @Test
    void assertTest() {
        driver.get("https://www.baidu.com");
        String test = driver.findElement(By.cssSelector("#su")).getAttribute("value");
        Assertions.assertEquals("百度一下",test);
    }

    @Test
    void assertTest() {
        driver.get("https://www.baidu.com");
        String test = driver.findElement(By.cssSelector("#su")).getAttribute("value");
        Assertions.assertNotEquals("百度一下",test);
    }

assertTrue / assertFalse

这两个方法用于判断我们里面的布尔值的真假,assertTrue表示当我们里面的值为真的时候测试验证成功,assertFalse则表示当里面的值为false的时候测试验证成功。

    @Test
    void assertTest() {
        driver.get("https://www.baidu.com");
        String test = driver.findElement(By.cssSelector("#su")).getAttribute("value");
        Assertions.assertNotEquals("百度一下",test);
    }

测试的执行顺序

    @Test
    void test1() {
        System.out.println("aaa");
    }
    @Test
    void test222() {
        System.out.println("bbb");
    }
    @Test
    void test3() {
        System.out.println("ccc");
    }
    @Test
    void test4() {
        System.out.println("ddd");
    }

我们看上面这一段的代码,其执行结果如下:

并没有按照从上到下的执行顺序来执行代码当我们想要约定其执行的顺序的时候就需要用到 

@TestMethodOrder(MethodOrderer.OrderAnnotation.class) 来对方法进行一个排序。

@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class TestAuto {
    @Test
    @Order(1)
    void test1() {
        System.out.println("aaa");
    }
    @Test
    @Order(2)
    void test222() {
        System.out.println("bbb");
    }
    @Test
    @Order(3)
    void test3() {
        System.out.println("ccc");
    }
    @Test
    @Order(4)
    void test4() {
        System.out.println("ddd");
    }
}

测试套件Suite

测试套件就是让我们一次性可以执行多个类或者多个包避免我们一个一个类来点击测试,或者把所有的测试都写到一个类中。

添加类

@Suite
@SelectClasses({TestAuto.class})
public class TestAuto2 {

}

 添加包

@Suite
//@SelectClasses({TestAuto.class})
@SelectPackages("com.auto_1_20")
public class runSuite {

}

添加包的时候我们要注意一些细节,我们包里面想要测试的类必须以Test或者tests来结尾并且要加上@Test,并且我们当前的的测试类的类名不能以Test结尾。

参数化

我们前面介绍的方法都是没有参数的,那么如果我们的测试的方法里面如果有参数的话应该怎么怎么办呢,这个时候我们需要对参数进行处理。

单参数

对方法使用 @ParameterizedTest 注解就可以了,要配合 @ValueSource 来找到数据源

    @ParameterizedTest
    @ValueSource(strings = {"zhangsan","lisi","wangwu"})
    void test(String name) {
        System.out.println("name"+name);
    }

多参数

通过 @CsvSource(value = ) 注解来实现,默认分隔符是 逗号。

    @ParameterizedTest
    @CsvSource(value = {"zhangsan,20","lisi,30","wangwu,40"})
    void test1(String name,int age) {
        System.out.println("name"+name+" age"+age);
    }

当我们的数据过多的时候我们可以借助文件来处理。

    @ParameterizedTest
    @CsvFileSource(resources = "/my.csv")
    void test1(String name,int age) {
        System.out.println("name"+name+" age"+age);
    }

动态参数

通过 @MethodSource() 注解来提供参数,也就是我们方法所想要的参数由另外一个方法来提供。

@ParameterizedTest
@MethodSource("test2")
void test1(String x) {
    System.out.println(x);
}
//定义提供数据的方法,可以是 Stream 流
static Stream<String> test2() {
    return Stream.of("张三","李四","王五");
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/180513.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

linux基本功系列之yum实战

文章目录一. yum命令介绍1.1 yum的介绍1.2 yum的优劣势1.3 使用yum的注意事项1.3.1 配置本地yum源1.3.2 配置网络yum源二. 语法格式及常用选项2.1 yum的全部参数2.2 影响yum的配置文件2.3 最常用的yum参数三. 参考案例实战3.1 使用yum进行安装3.2 使用yum升级和更新软件包3.3 软…

Kettle(9):排序记录组件

1 组件介绍 排序组件可以将Kettle数据流中的数据进行排序,可以指定升序、还是降序排列 2 需求 使用Kettle将t_user表中的用户数据,按照年龄升序排序,并将排序后的数据装载到Excel 3 构建Kettle数据流图 效果图

第二章 Java编程基础

第二章 Java编程基础 目录一&#xff0e; Java基本语法1. 基本格式2. 注释3. 标识符4. 关键字5. 常量二&#xff0e; 变量1. 定义2. 数据类型3. 整数类型变量4. 浮点类型变量5. 字符类型变量6. 布尔类型变量7. 类型转换8. 自动提升9. 变量作用域三&#xff0e; 运算符1. 算数运…

【VisualBasicApplication】Excel编程 快速入门

VBAExcel的宏与VBA宏的录制宏的启动运行快捷键运行宏&#xff1a;使用Excel对象运行宏*VBA的数据类型字符串&#xff08;String&#xff09;整形&#xff08;Integer&#xff09;和长整形&#xff08;Long&#xff09;单精度浮点型&#xff08;Single&#xff09;和双精度浮点型…

我应该使用哪个版本的 JDK?

本文在写作过程中参考了whichJDK ​ 要构建和运行 Java 应用程序&#xff0c;就需要安装 JDK 环境。 OpenJDK 是 Java SE 规范的开源软件&#xff0c;但它只是源代码。二进制发行版由不同的供应商提供&#xff0c;适用于许多受支持的平台&#xff0c;这些发行版在许可证、商业…

设计模式 - 创建型模式_7种单例模式实现

文章目录创建型模式概述Case7种单例模式实现静态类使⽤懒汉模式(线程不安全)懒汉模式(线程安全)饿汉模式(线程安全)使⽤类的内部类(线程安全)双重锁校验(线程安全)CAS「AtomicReference」(线程安全)Effective Java作者推荐的枚举单例(线程安全)小结创建型模式 创建型模式提供创…

MySQL约束详解

目录 概念 作用 分类 MySQL约束——主键约束 概念 操作 操作——添加单列主键 操作——添加多列主键&#xff08;联合主键&#xff09; 操作——删除主键约束 MySQL约束-自增长约束(auto_increment) 概念 语法 操作 特点 指定自增字段初始值 delete和truncate在删…

零基础学JavaWeb开发(二十六)之 nginx(2)

5、基于Nginx解决跨域问题 5.1、什么是网站跨域问题 前端部署 html.mayikt.com /index.html 后端部署 api.mayikt.com/ 接口 java 浏览器访问&#xff1a;http://html.mayikt.com/user.html 页面里面 ajax 请求&#xff1a;http://api.mayikt.com/getUser 浏览器访问&#…

力扣刷题记录——697. 数组的度、728. 自除数 、821. 字符的最短距离

本专栏主要记录力扣的刷题记录&#xff0c;备战蓝桥杯&#xff0c;供复盘和优化算法使用&#xff0c;也希望给大家带来帮助&#xff0c;博主是算法小白&#xff0c;希望各位大佬不要见笑&#xff0c;今天要分享的是——《力扣刷题记录——697. 数组的度、728. 自除数 、821. 字…

腾讯云开发者2022年度热文盘点

01十亿人都在用的健康码运维体系如何设计&#xff1f;随着疫情防控模式的迭代&#xff0c;健康码访问DAU逐渐趋于下跌&#xff0c;意味着健康码将逐步完成历史使命&#xff0c;见证着疫情的结束。本文特邀腾讯研发工程师李雄政将从技术架构、可观测体系、运营保障体系等运维体系…

星德胜冲刺上交所上市:计划募资约10亿元,朱云舫为实际控制人

近日&#xff0c;星德胜科技&#xff08;苏州&#xff09;股份有限公司&#xff08;下称“星德胜”&#xff09;预披露更新招股书&#xff0c;准备在上海证券交易所主板上市。据贝多财经了解&#xff0c;星德胜于2022年7月1日递交上市申请&#xff0c;海通证券为其保荐机构。 …

java ssm学生成绩查询考务系统

1 绪论 1 1.1 项目背景 1 1.2 项目研究的目的和方法 1 1.2.1 项目的研究目的 1 1.2.2 开发方法及步骤 1 1.3 本章小结 2 2. 开发平台介绍 3 2.1 系统开发环境 3 2.1.1 Eclipse 3 2.2 相关技术 4 2.2.1 JSP技术 …

Web Spider 常见混淆EVAL、AA、JJ、JSFUCK

文章目录一、EVAL & constructor二、AA混淆三、JJ混淆四、JSFUCK五、针对混淆的方法简单hook总结混淆的原理&#xff1a;就是把原本清晰的代码故意搞得花里胡哨&#xff0c;让局外人看不懂&#xff1b; 混淆的目的&#xff1a;让逆向者很难理解代码的意图&#xff0c;无法读…

随笔集1.24

秋夜独坐经常性会出现啥都不想干的情况&#xff0c;似那黄鹤一去不复返&#xff0c;只留下脑海的白云千载空悠&#xff0c;对任何事情&#xff0c;读书、研究、游戏都提不起兴趣&#xff0c;每当此时静坐于窗下灯前&#xff0c;想起王摩诘所谓雨中山果落&#xff0c;灯下草虫鸣…

第二章-计算机网络物理层

文章目录计算机网络一、物理层1.1、物理层的基本概念1.2、数据通信的基本知识编码与调制编码调制混合调制信道的极限容量传输方式1.3、物理层下面的传输媒体导引型传输媒体非导引型传输媒体1.4、互联网接入技术电话网拨号接入数字用户线接入光纤同轴混合网接入光纤接入无线接入…

用友BIP对接外部旺店通企业版奇门系统

用友BIP对接外部旺店通企业奇门系统源系统:旺店通企业奇门慧策最先以旺店通ERP切入商家核心管理痛点——订单管理&#xff0c;之后围绕电商经营管理中的核心管理诉求&#xff0c;先后布局流量获取、会员管理、仓库管理等其他重要经营模块。慧策的产品线从旺店通ERP起步&#xf…

Jetpack架构组件库:Lifecycle、LiveData、ViewModel

Lifecycle 添加依赖 dependencies {def lifecycle_version "2.5.1" // ViewModelimplementation "androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version"// ViewModel utilities for Composeimplementation "androidx.lifecycle:lifecy…

解决nes_py在pip安装报错的问题

目录 项目场景&#xff1a; 问题描述 原因分析&#xff1a; 解决方案&#xff1a; 解决结果&#xff1a; 项目场景&#xff1a; 想跟随油管某视频复现强化学习方法玩超级马里奥的过程&#xff0c;结果在在Anaconda3虚拟环境中用pip安装nes_py时一直报错&#xff0c;报错信…

基于Python实现的图像文字识别OCR工具,包含GUI界面附完整版代码可直接运行

引言 最近在技术交流群里聊到一个关于图像文字识别的需求,在工作、生活中常常会用到,比如票据、漫画、扫描件、照片的文本提取。 博主基于 PyQt + labelme + PaddleOCR 写了一个桌面端的 OCR 工具,用于快速实现图片中文本区域自动检测 + 文本自动识别。 识别效果如下图所示:…

总结JDK中的时间日期类

在学习SpringMVC时&#xff0c;遇到了接收时间日期类型的参数的案例。 回顾JDK中与时间日期相关的API。 来系统地学习一下日期时间相关的API。 前置知识 在世界上有统一的时间标准 格林尼治时间&#xff0c;简称GMT&#xff08;以伦敦的本初子午线为标准&#xff09;&#x…