软件测试(Junit5 单元测试框架)(五)

1. Junit单元测试框架

  1. Junit 是 Java 的一个单元测试框架, 使用Selenium写自动化测试用例, 使用Junit 管理写好的测试用例.

2. 注解:

  • @Test 表示当前的这个方法是一个测试用例.

示例:

  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>
   <scope>test</scope>
</dependency>

  1. 编码
    • 不能有修饰符
    • 返回值为空
      在这里插入图片描述
  • @Disabled 被修饰的方法将不会被执行.
    在这里插入图片描述
  • @BeforeAll , @AfterAll

    • 针对整个类起作用, 被修饰的方法需要添加static关键字
    • @BeforeAll 一般用于初始化, 如果做UI自动化,通常用于创建驱动,打开网页,
    • @AfterAll 一般用于扫尾工作,如果做UI自动化, 通常用于关闭浏览器
      在这里插入图片描述
  • @BeforeEach, @AfterEach
    • 在每个方法执行前后执行
      在这里插入图片描述
      在这里插入图片描述

3. 参数化:

首先引入Parameterized依赖 (与Junit 版本保持一致):

<!-- 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>
   <scope>test</scope>
</dependency>

  • 传递单参数 使用 @ValueSource() 注解
    • 传递int型参数
        @ParameterizedTest
        @ValueSource(ints = {1,2,3})
        void Test(int num) {
             System.out.println(num);
       }
    
    在这里插入图片描述
    • 传递字符串类型参数
      @ParameterizedTest
      @ValueSource(strings = {"1","2", "3"})
      void Test2(String str) {
           System.out.println(str);
      }
    
    在这里插入图片描述
  • 多参数
    • 通过 @CsvFileSource 注解获取参数
      1. 添加CSV文件
      在这里插入图片描述
      2. 编码

      
      @ParameterizedTest
      @CsvFileSource(resources = {"test1.csv"})
      void Test3(String name) {
           System.out.println(name);
       }    
      
  1. 运行结果:
    在这里插入图片描述

    • 通过方法获取参数
       public static Stream<Arguments> Generator() {
       return Stream.of(Arguments.arguments(1,"张三"),
              Arguments.arguments(2,"李四"),
              Arguments.arguments(3,"王五")
      );
    }
    
    @ParameterizedTest
    @MethodSource("Generator")
    void Test4(int num,String str) {
       System.out.println(num+","+str);
    }
    

在这里插入图片描述

4. 设置顺序

  • 使用 @org.junit.jupiter.api.Order() 配置测试用例执行顺序

    • 示例:设置顺序
import org.junit.jupiter.api.MethodOrderer;
import org.junit.jupiter.api.TestMethodOrder;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.ValueSource;

@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class Order {
   @ParameterizedTest
   @ValueSource(ints = {1,2,3})
   @org.junit.jupiter.api.Order(2)
   void Test1(int num) {
       System.out.println("Test1");
       System.out.print(num);
   }


   @ParameterizedTest
   @ValueSource(strings = {"1","2", "3"})
   @org.junit.jupiter.api.Order(1)
   void Test2(String str) {
       System.out.println("Test2");
       System.out.print(str);
   }
}

在这里插入图片描述

  • 示例:随机执行
import org.junit.jupiter.api.MethodOrderer;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.TestMethodOrder;

@TestMethodOrder(MethodOrderer.Random.class)
public class Order {

    @Test
    void Test1() {
        System.out.println("Test1");
    }

    @Test
    void Test2() {
        System.out.println("Test2");
    }
}

在这里插入图片描述

5. 断言

  • 断言相等
  • 断言不相等
  • 断言为空
  • 断言不为空
  • 通过 Assertions 实现断言
    示例: 断言相等
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.ValueSource;

public class AssertTest {
   @ParameterizedTest
   @ValueSource(ints = {1})
   void Test (int num){
       System.out.println(num);
       // 判断 num == 1 ?
       Assertions.assertEquals(num,1);
   }
}

在这里插入图片描述

import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.ValueSource;

public class AssertTest {
   @ParameterizedTest
   @ValueSource(ints = {1})
   void Test (int num){
      System.out.println(num);
       // 判断 num == 1 ?
       Assertions.assertEquals(num,2);
   }
}

在这里插入图片描述

7. Suite

首先引入maven依赖

<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>
       <!-- 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>
  • 通过添加@Suit 和 @SelectClasses 注解指定Class
import org.junit.platform.suite.api.SelectClasses;
import org.junit.platform.suite.api.Suite;

@Suite
@SelectClasses({AssertTest.class,Main.class,Order.class})
// 依次执行 AssertTest.class、Main.class、Order.class 三个类中的测试方法
public class RunSuite {

}

在这里插入图片描述

  • 通过添加@Suit 和 @SelectPackages 注解 指定package
    在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

[译] 教你如何用 Flutter 的 GestureDetector 构建自定义滑块

这个控件非常简单&#xff0c;我们接收完成的百分比值&#xff0c;以及正面和背面部分的颜色。主 Container 将背面颜色作为背景&#xff0c;我们将绘制正面部分去覆盖它。它的子节点是 Row&#xff0c;虽然它只包含一个子节点&#xff0c;但我保留了它&#xff0c;方便你添加另…

impala使用round函数保留小数失效

问题描述如标题所示 1.理论情况: round()函数,是用来做四舍五入的,比如:select round(2.126,2) 结果为:2.132.异常情况: 但是有时候会出现一些意料之外的情况,比如:select round(1/3,3) 结果为:0.33300000000000002正确的应该是:0.333截图效果示例如下: 3.解决办…

51之LCD1602与模块化编程

LCD1602&#xff0c;即我们开发板上附赠的那个液晶显示屏&#xff0c;我们通常可以使用这个液晶显示屏用来做调试工具&#xff0c;我们使用一下江科大提供的关于这个LCD1602的代码&#xff0c;用来为我们提供了类似C语言标准库里面的printf函数的用法&#xff0c;只是这个更加复…

非关系型数据库-----------探索 Redis高可用 、持久化、性能管理

目录 一、Redis 高可用 1.1什么是高可用 1.2Redis的高可用技术 二、 Redis 持久化 2.1持久化的功能 2.2Redis 提供两种方式进行持久化 三、Redis 持久化之----------RDB 3.1触发条件 3.1.1手动触发 3.1.2自动触发 3.1.3其他自动触发机制 3.2执行流程 3.3启动时加载…

AssetBundle在移动设备上丢失

1&#xff09;AssetBundle在移动设备上丢失 2&#xff09;Unity云渲染插件RenderStreaming&#xff0c;如何实现多用户分别有独立的操作 3&#xff09;如何在圆柱体类型的地图中编程玩家的输入 4&#xff09;Mixamo动画的根运动问题 这是第380篇UWA技术知识分享的推送&#xff…

如何处理ubuntu22.04LTS安装过程中出现“Daemons using outdated libraries”提示

Ubuntu 22.04 LTS 中使用命令行升级软件或安装任何新软件时&#xff0c;您可能收到“Daemons using outdated libraries”&#xff0c;“Which services should be restarted?”的提示&#xff0c;提示下面列出备选的重启服务&#xff0c;如下。 使用以下命令&#xff0c;能够…

盒子模型和伪元素

一.盒子模型的理解 我们平常在布局的时候,少不了盒子模型,今天讲解一下对盒子模型的理解。 理解:我们可以把盒子模型比作一个装着快递的包裹:里面的东西可以比作是内容,盒子里面的填充物可以比作是padding 外层的包装纸线条,可以比作是border&#xff0c;这个快递离另外个快递…

PS从入门到精通视频各类教程整理全集,包含素材、作业等(9)复发

PS从入门到精通视频各类教程整理全集&#xff0c;包含素材、作业等 最新PS以及插件合集&#xff0c;可在我以往文章中找到 由于阿里云盘有分享次受限制和文件大小限制&#xff0c;今天先分享到这里&#xff0c;后续持续更新 第一课 ——第三课素材文件 https://www.alipan.c…

20230405让WIN11暂停更新365天(暂停更新35天)

20230405让WIN11暂停更新365天&#xff08;暂停更新35天&#xff09; 2024/4/5 20:34 缘起&#xff0c;备用的笔记本电脑只要一开机&#xff0c;就会被比尔盖茨/微软提醒去更新/升级&#xff01; 不胜其烦&#xff01; 虽然可以在设置里设置暂停更新35天。但是也是不胜其扰&…

蓝桥杯杯赛之深度优先搜索优化《1.分成互质组》 《 2.小猫爬山》【dfs】【深度搜索剪枝优化】【搜索顺序】

文章目录 思想例题1. 分成互质组题目链接题目描述【解法一】【解法二】 2. 小猫爬山题目链接题目描述输入样例&#xff1a;输出样例&#xff1a;【思路】【WA代码】【AC代码】 思想 本质为两种搜索顺序&#xff1a; 枚举当前元素可以放入哪一组枚举每一组可以放入哪些元素 操…

解决windows下Qt Creator显示界面过大的问题

&#x1f40c;博主主页&#xff1a;&#x1f40c;​倔强的大蜗牛&#x1f40c;​ &#x1f4da;专栏分类&#xff1a;QT❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 目录 问题描述 解决方法 1、右击此电脑--->属性 2、点击高级系统设置--->点击环境变量 3、 找到系…

YOLOv3

YOLOv3 论文简介论文内容1. 采用darknet53FPN结构2. 边框预测保持与YOLOv2保持一致3. 沿用YOLOv2 kmeans生成先验anchors4.类别预测改为多分类格式 论文简介 论文&#xff1a;《YOLOv3: An Incremental Improvement》 作者&#xff1a;Joseph Redmon, Ali Farhadi 论文下载地址…

使用 Kafka 保证消息不丢失的策略及原理解析

✨✨祝屏幕前的小伙伴们每天都有好运相伴左右&#xff0c;一定要天天开心&#xff01;✨✨ &#x1f388;&#x1f388;作者主页&#xff1a; 喔的嘛呀&#x1f388;&#x1f388; 目录 一、引言 二. 持久化存储 2.1持久化存储原理&#xff1a; 2.2使用示例&#xff1a; …

7.java openCV4.x 入门-Mat之转换、重塑与计算

专栏简介 &#x1f492;个人主页 &#x1f4f0;专栏目录 点击上方查看更多内容 &#x1f4d6;心灵鸡汤&#x1f4d6;我们唯一拥有的就是今天&#xff0c;唯一能把握的也是今天建议把本文当作笔记来看&#xff0c;据说专栏目录里面有相应视频&#x1f92b; &#x1f9ed;文…

2024HW --->反序列化漏洞!

对于反序列化&#xff0c;这个漏洞也是常用的&#xff0c;不过涉及到的方面非常非常广&#xff0c;比其他漏洞也难很多 于是本篇文章就分成PHP和JAVA的反序列化来讲讲 1.反序列化 想要理解反序列化&#xff0c;首先就要理解序列化 序列化&#xff1a;把对象转换为字节序列的过…

Redis -- 缓存雪崩问题

缓存雪崩是指在同一时段大量的缓存key同时失效或者Redis服务宕机&#xff0c;导致大量请求到达数据库&#xff0c;带来巨大压力。 可能原因 : 同一时间大量的key到期 ; 解决方案&#xff1a; 给不同的Key的TTL添加随机值 利用Redis集群提高服务的可用性 给缓存业务添加降…

【C++】哈希思想的应用(位图、布隆过滤器)及海量数据处理方法

文章目录 前言位图什么是位图简单实现一个自己的位图位图的应用场景 布隆过滤器位图的缺陷及布隆过滤器的提出布隆过滤器的概念简单实现一个自己的布隆过滤器布隆过滤器的优缺点布隆过滤器的应用场景 海量数据处理 前言 哈希思想的在实际中的应用除了哈希表这个数据结构之外还…

分享一个知识 -- bean的静态属性不会被封装返回

public class TeacherChartDataVo {private String name;// bateacherNameprivate List<Integer> data;private static String type "line";private static String stack "Total"; }比如&#xff1a;type 和stack 不会被返回。

LangChain Demo | 如何调用stackoverflow并结合ReAct回答代码相关问题

背景 楼主决定提升与LLM交互的质量&#xff0c;之前是直接prompt->answer的范式&#xff0c;现在我希望能用上ReAct策略和能够检索StackOverflow&#xff0c;让同一款LLM发挥出更大的作用。 难点 1. 怎样调用StackOverflow step1 pip install stackspi step 2 from la…

RuoYi-Cloud下载与运行

一、源码下载 若依官网:RuoYi 若依官方网站 鼠标放到"源码地址"上,点击"RuoYi-Cloud 微服务版"。 跳转至Gitee页面,点击"克隆/下载",复制HTTPS链接即可。 源码地址为:https://gitee.com/y_project/RuoYi-Cloud.git 点击复制 打开IDEA,选…