自动化测试3:Junit单元测试框架

news2024/11/28 14:31:45

目录

1.相关技术

1.1注解

1.1.1@Test

1.1.2@Disables 忽略

1.1.3@BeforeAll @AfterAll

1.1.4@BeforeEach @AfterEach

1.2参数化

1.2.1单参数

1.2.2多参数

1.2.3CSV获取参数

1.2.4方法获取参数

1.3运行顺序

1.3.1问题

1.3.2按指定顺序执行

1.3.3随机执行

1.4.断言

2.测试套件

2.1通过class运行测试用例

2.2通过包运行测试用例


1.相关技术

1.1注解

1.1.1@Test

表示当前的这个方法是一个测试用例

要引入依赖(中央仓库-->junit-->JUnit Jupiter API » 5.9.1)

<!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-api -->
<dependency>
    <groupId>org.junit.jupiter</groupId>
    <artifactId>junit-jupiter-api</artifactId>
    <version>5.9.1</version>
</dependency>

@Test
void Test01(){
    System.out.println("这是Junit中Test01");
}

1.1.2@Disables

忽略不运行这个测试用例

@Disabled
    void Test02(){
        System.out.println("这是Junit中Test01");
    }

1.1.3@BeforeAll @AfterAll

方法前要加static

@BeforeAll:在运行其他所有测试用例之前运行 只运行一次      一般存放连接,开启   

@AfterAll:在运行其他所有测试用例之后运行 只运行一次       一般存放关闭

@BeforeAll
    static void SetUp(){
        System.out.println("这是BeforeAll的语句");
    }

    @AfterAll
    static void TearDown(){
        System.out.println("这是AfterAll的语句");
    }

 

1.1.4@BeforeEach @AfterEach

@BeforeEach 在运行每一个测试用例之前运行 有几个测试用例运行几次

@AfterEach 在运行每一个测试用例之后运行 有几个测试用例运行几次

@BeforeEach
    void SetUp(){
        System.out.println("这是BeforeAll的语句");
    }

    @AfterEach
    void TearDown(){
        System.out.println("这是AfterAll的语句");
    }

 

1.2参数化

 引入依赖 中央仓库-->Parameterized-->JUnit Jupiter Params » 5.9.1

<!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-params -->
    <dependency>
        <groupId>org.junit.jupiter</groupId>
        <artifactId>junit-jupiter-params</artifactId>
        <version>5.9.1</version>
    </dependency>

1.2.1单参数

@ParameterizedTest

@ValueSource(类型+s={,,,})

@ParameterizedTest
    @ValueSource(ints={1,2,3})
    void Test04(int num){
        System.out.println(num);
    }

    @ParameterizedTest
    @ValueSource(strings={"1","2","3"})
    void Test05(String num){
        System.out.println(num);
    }

 

1.2.2多参数

@ParameterizedTest

@CsvSource({,,,})

@ParameterizedTest
    @CsvSource({"1,2,3"})
    void Test06(String x,String y,String z){
        System.out.println(x);
        System.out.println(y);
        System.out.println(z);
    }

 

1.2.3CSV获取参数

@ParameterizedTest

@CsvFileSource(resources="  文件名.csv")

@ParameterizedTest  //运行几次取决于csv有几行
@CsvFileSource(resources = "test01.csv")//这个文件必须以csv结尾
  void Test06(String name){
    System.out.println(name);
}

test01.csv

张三1. 李四1. 王五1
张三2. 李四2. 王五2
张三3. 李四3. 王五3

 

1.2.4方法获取参数

@ParameterizedTest

@MethodSource("Generator")

测试数据:

public static Stream<Arguments> Genertor(){

return Stream.of(Arguments.arguments(),

Arguments.arguments(),

Arguments.arguments(),...

);
}

@ParameterizedTest
@MethodSource("Generator")
//接收
 void Test07(int num,String name){
    System.out.println(num+" : "+name);
}
//测试数据
public static Stream<Arguments> Generator(){
    return Stream.of(Arguments.arguments(1,"张三"),
            Arguments.arguments(2,"李四"),
            Arguments.arguments(3,"王五")
     );
}

 

1.3运行顺序

1.3.1问题

更改代码顺序,不改变运行顺序

执行顺序固定:Junit有自己固定的执行顺序

 

 

1.3.2按指定顺序执行

类前加注解@TestMethodOrder(MethodOrder.OrderAnnotation.class)

每个用例前加@Order(i) 在第i个执行,i从1开始

 

 

1.3.3随机执行

@TestMethodOrder(MethodOrder.Random.class)

 

1.4.断言

//断言相等
Assertions.assertEquals(1,num);
//断言不相等
Assertions.assertNotEquals(2,num);
String str=null;
//断言为空
Assertions.assertNull(str);
//断言不为空
String str1="null1";
Assertions.assertNotNull(str1);

2.测试套件

引入依赖

<dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-java</artifactId>
            <version>3.141.59</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.11.0</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-api -->
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-api</artifactId>   //注解
            <version>5.9.1</version>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-params</artifactId>    //参数化
            <version>5.9.1</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-params -->
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-params</artifactId>     //参数化
            <version>5.9.1</version>
        </dependency>
        <dependency>
            <groupId>org.junit.platform</groupId>
            <artifactId>junit-platform-suite</artifactId>
            <version>1.9.1</version>
            <scope>test</scope>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.junit.platform/junit-platform-suite -->
        <dependency>
            <groupId>org.junit.platform</groupId>
            <artifactId>junit-platform-suite</artifactId>
            <version>1.9.1</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-engine -->
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-engine</artifactId>
            <version>5.9.1</version>
            <scope>test</scope>
        </dependency>

2.1通过class运行测试用例

@Suite
//通过class测试用例执行
@SelectClasses({JunitTest.class,JunitTest01.class,JunitTest02.class})//规定执行顺序
public class RunSuite {
}

 

2.2通过包运行测试用例

@Suite
@SelectPackages(value ={"Package01","Package02"})
public class RunSuite {
}

 

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

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

相关文章

webpack的使用

一、什么是webpack&#xff1f; webpack是一个前端构建工具&#xff0c;目前比较主流的构建工具&#xff0c;自定义的模块比较多。 二、应用场景 vue、react、angular 都可以通过webpack构建全部可供访问的页面数量不超过500个 三、安装 通过npm方式在项目根目录下执行命令…

spring官网guide案例直接运行

spring官网guide案例可以直接运行 spring guide 的案例基本包含 spring 以及 springboot 很多功能的案例 具体网址: https://spring.io/guides 我们使用 GitHub CodeSpaces 或者 GitPod 甚至不需要 git clone 代码到本地 , 可以直接在线运行 GitHub CodeSpacesGitPod 说明:…

SpringBoot 如何实现文件上传和下载

当今Web应用程序通常需要支持文件上传和下载功能&#xff0c;Spring Boot提供了简单且易于使用的方式来实现这些功能。在本篇文章中&#xff0c;我们将介绍Spring Boot如何实现文件上传和下载&#xff0c;同时提供相应的代码示例。 文件上传 Spring Boot提供了Multipart文件上…

Java 集合 - Map 接口

文章目录 1.概述2.常用 API3.遍历 Map 集合4.HashMap 和 Hashtable5.LinkedHashMap6.TreeMap7.Properties8.Set 集合与 Map 集合的关系9.总结 1.概述 在日常生活和编程中&#xff0c;我们常常需要处理一种特殊的关系&#xff1a;一一对应的关系&#xff0c;如 IP 地址与主机名…

深入浅出Docker:Java开发者的快速上手指南

前言1. Docker是什么&#xff1f;2. 安装Docker3. 使用Docker容器运行Java应用4. 使用Docker部署Java Web应用5. 总结 前言 在今天的软件开发环境中&#xff0c;Docker已经成为了一种常见的开发和部署工具。无论你是前端开发者、后端开发者&#xff0c;还是DevOps工程师&#…

【C++系列P3】‘类与对象‘-三部曲——[基础知识](1/3)

前言 大家好吖&#xff0c;欢迎来到 YY 滴 C系列 &#xff0c;热烈欢迎&#xff01; 【 类与对象-三部曲】的大纲主要内容如下&#xff1a; 如标题所示&#xff0c;本章是【 类与对象-三部曲】三章中的第一章节——基础知识章节&#xff0c;主要内容如下&#xff1a; 目录 一.…

Redis(五)发布与订阅

文章目录 1、什么是发布与订阅2、指令与描述3、指令测试 1、什么是发布与订阅 Redis 发布订阅 (pub/sub) 是一种消息通信模式&#xff1a;发送者 (pub) 发送消息&#xff0c;订阅者 (sub) 接收消息。 Redis 的 subscribe 命令可以让客户端订阅任意数量的频道&#xff0c; 每当…

一文带你了解MySQL之事务的简介

前言&#xff1a; 事务&#xff08;Transaction&#xff09;是一组SQL组成的执行单元&#xff08;Unit&#xff09;&#xff0c;是数据库并发控制和恢复回滚的基本单位。一个事务中可能包含多个SQL&#xff0c;要么都失败&#xff0c;要么都成功&#xff0c;今天我们就详细学习…

Linux|shell编程|拷贝大文件之显示进度条

前言&#xff1a; Linux由于自身并不是一个图形化的界面&#xff0c;因此&#xff0c;命令行是它的一个基础交互模式&#xff0c;而我们有的时候需要进度条来让程序运行的更加美观&#xff0c;更加直观&#xff0c;例如&#xff0c;一些比较消耗io的操作&#xff0c;文件拷贝&…

计算机操作系统第四版第八章磁盘存储器的管理—课后习题答案

1.目前常用的外存有哪几种组织方式? (1)连续组织方式。为每一个文件分配--组位置相邻接的盘块&#xff0c;由此形成的文件物理结构是顺序式的文件结构。 (2)链接组织方式。为每个文件分配一组位置离散的盘块&#xff0c;通过给每个盘块设置一个指针,将属于同-一个文件的盘块链…

【SDP协议】

SDP 1.概念2术语2.1 SERVICE ATTRIBUTE2.3 UUID 3 数据表示3.2 hci log4.4.4.3 PARTIAL RESPONSES AND CONTINUATION STATE4.4.4.4 ERROR HANDLING4.4.4.5 SERVICE SEARCH TRANSACTION4.4.4.6 SERVICE ATTRIBUTE TRANSACTION4.4.4.3 SERVICE SEARCH ATTRIBUTE TRANSACTION4.4.4…

【密码学复习】第九讲 密钥管理(二)

公钥的分发问题 广播式公钥分发&#xff1a;任意通信方将它的公钥发送给另一方或广播给其他通信各方。 目录式公钥分发&#xff1a;由可信机构维护一个公开、动态、可访问的公开密钥目录。可以通过可信渠道到可信机构登记并申请增、删、改自己的公钥。其他人可以基于公开…

ARM的七种工作模式

分类 ARM的工作模式分为普通模式、特权模式&#xff0c;其中特权模式又细分为六种模式。 普通模式用户模式&#xff08;User&#xff09;大部分任务执行在这种模式 特权模式快速中断模式FIQ当一个高优先级&#xff08;fast) 中断产生时将会进入这种模式普通中断模式IRQ当一个…

数据库基础——4.select语句

这篇文章我们来讲一下select语句&#xff0c;这是数据库中最最重要的一个关键字 目录 1.select的基本用法 1.1 select的基本用法 1.2 列的别名 1.3 去重查询 1.4 空值参与运算 1.5 着重号 1.6 查询常数 1.7 条件查询 2. 查看表结构 1.select的基本用法 1.1 select的…

12. 测试搭建百万并发项目

本文利用四台虚拟机&#xff0c;实现了百万并发的项目&#xff0c;并解决其中遇到的一些问题 一、百万并发项目 准备4个虚拟机&#xff0c;其中一个4G内存&#xff0c;2核CPU&#xff1b;另外三个2G内存&#xff0c;1核CPU。 在服务器中运行11节的代码&#xff0c;客户端中运…

分享一个500页面给大家

先看效果&#xff1a; 再看代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>500页面</title><style>body,html {padding: 0;margin: 0;font-family: Quicksand, sans-s…

学生端程序(极域电子教室)破解方法

今天信息课上&#xff0c;由于老师的电脑控制&#xff08;极域电子教室&#xff09;导致某些同学无法摸鱼&#xff0c;于是他们就想让我破解&#xff0c;这道不难&#xff0c;我也就使用了三四周就破解出来了&#xff0c;今天就来和大家分享一下极域电子教室的破解方法 目录 …

(四)调整PID控制器参数的指南

一、控制系统设计快速入门和环境 首先确定一下控制任务。快速、精准地控制&#xff0c;必要的稳定性&#xff0c;时域&#xff08;上升时间、超调等&#xff09;&#xff0c;频域&#xff08;带宽、阻尼比&#xff09;然后明白控制系统特点。类积分器&#xff1f;开环稳定性、高…

深度学习实战项目(三)-行人检测重识别yolov5+reid(跑通+界面设计)

行人检测重识别yolov5reid&#xff08;跑通界面设计&#xff09; 参考源代码: github 权重文件&#xff1a; 根据github上面的网盘进行权重下载&#xff1a; 检测&#xff1a;将 ReID_resnet50_ibn_a.pth放在person_search/weights文件下&#xff0c;yolov5s.pt放person_sear…

pytest之fixture

fixture 0、文档1、局部前置处理2、全局前置处理3、全局前置处理 0、文档 pytest-fixture fixture 1、局部前置处理 pytest.fixture() 装饰器用于声明函数是一个fixture&#xff0c;该fixture的名字默认为函数名&#xff0c;也可以自己指定名称&#xff08;name取别名&#…