Junit 更多-ApiHug准备-测试篇-010

    🤗 ApiHug × {Postman|Swagger|Api...} = 快↑ 准√ 省↓

  1. GitHub - apihug/apihug.com: All abou the Apihug   
  2. apihug.com: 有爱,有温度,有质量,有信任
  3. ApiHug - API design Copilot - IntelliJ IDEs Plugin | Marketplace

如果大家使用过testNG:

TestNG是Java中的一个测试框架, 类似于JUnit 和NUnit, 功能都差不多, 只是功能更加强大,使用也更方便。

一定会被 testNG(Next Generation的首字母) 里面的一些特征吸引, 比如参数化, 当初也是非常吸引笔者, 现在Junit5中已经都有了!

不得不说 testNG, 里面有很多的设计, 在新一代的 Junit5 都作了参考, 笔者认为,在开发人员这里Junit 使用比较广泛, 在测试开发人员中 testNG 使用比较多。

第一次接触 testNG 确实也是团队中 QA 组在用这个,入坑的。

#参数

要使用 JUnit 5 进行参数化测试,除了 junit-jupiter-engine 基础依赖之外,还需要另个模块依赖:junit-jupiter-params,其主要就是提供了编写参数化测试 API。


testImplementation("org.junit.jupiter:junit-jupiter-params") {because 'junit params'
}

例子: ParameterizedUnitTestopen in new window

#基本数据源测试

基本数据源测试: @ValueSource

@ValueSource 是 JUnit 5 提供的最简单的数据参数源,支持 Java 的八大基本类型和字符串,Class,使用时赋值给注解上对应类型属性,以数组方式传递,示例代码如下:


@ParameterizedTest@ValueSource(ints = {2, 4, 8})void testNumberShouldBeEven(int num) {Assertions.assertEquals(0, num % 2);
}@ParameterizedTest
@ValueSource(strings = {"Effective Java", "Code Complete", "Clean Code"})
void testPrintTitle(String title) {System.out.println(title);
}

@ParameterizedTest 作为参数化测试的必要注解,替代了 @Test 注解。任何一个参数化测试方法都需要标记上该注解。

#CSV 数据源测试

通过 @CsvSource 可以注入指定 CSV 格式 (comma-separated-values) 的一组数据,用每个逗号分隔的值来匹配一个测试方法对应的参数,下面是使用示例:


@ParameterizedTest
@CsvSource(delimiter = ',',value = {"1,One", "2,Two", "3,Three"})
void testDataFromCsv(long id, String name) {System.out.printf("id: %d, name: %s\n", id, name);
}

可以得到结果:


id: 1, name: One
id: 2, name: Two
id: 3, name: Three

JUnit 还提供了读取外部 CSV 格式文件数据的方式作为数据源的实现,我们只要用 @CsvFileSource 指定资源文件路径即可,使用起来跟 @CsvSource 一样简单。

@CsvFileSource 指定的资源文件路径时要以 / 开始,寻找当前测试资源目录下文件


@ParameterizedTest
@CsvFileSource(resources = {"/data.csv"})
void testDataFromCsvFile(long id, String name) {System.out.printf("id: %d, name: %s", id, name);
}

文件目录:


├─java
│  └─com
│      └─dearxue
│          └─tester
│                  ParameterizedUnitTest.java
│
└─resourcesdata.csv

JUnit 还提供了以下三种数据源参考 ParameterizedUnitTestopen in new window:

  1. @EnumSource:允许我们通过参数值,给指定 Enum 枚举类型传入,构造出枚举类型中特定的值。
  2. @MethodSource:指定一个返回的 Stream / Array / 可迭代对象 的方法作为数据源。 需要注意的是该方法必须是静态的,并且不能接受任何参数。
  3. @ArgumentSource:通过实现 ArgumentsProvider 接口的参数类来作为数据源,重写它的 provideArguments 方法可以返回自定义类型的 Stream<Arguments> ,作为测试方法所需要的数据使用。

#套件

套件 suite 是个什么? 听起来像个套餐, 没错他就是个套餐。

测试套件其实就是JUnit5允许我们运行多个包或者类中的测试方法,也就是分组测试。JUnit5中使用@Suite注解来声明测试套件, BTW 这个概念在testNG 也早就有了。

在开始分组测试之前,我们先了解几个注解:

  1. @Tag:测试类和方法可以通过此注解进行标记。这些标签以后可用于过滤测试发现和执行。
  2. @Disabled:整个测试类或单个测试方法可以通过此注解禁止测试。

还有更多的这几个:

  1. @RunWith(JUnitPlatform.class) 执行套件
  2. @SelectPackages({"packageA","packageB"})创建测试套件
  3. @SelectClasses({a.class,b.class,c.class}) 创建测试套件
  4. @IncludePackages("PackageName") 过滤需要执行的测试包
  5. @ExcludePackages("PackageName") 过滤掉不需要执行的测试包
  6. @IncludeClassNamePatterns 过滤需要执行的测试类
  7. @ExcludeClassNamePatterns 过滤不需要执行的测试类
  8. @IncludeTags("sit") 过滤需要执行的测试方法
  9. @ExcludeTags("prod") 过滤不需要执行的测试方法

//suite we need
testImplementation 'org.junit.platform:junit-platform-suite:1.8.2'

例子在 Junit test suiteopen in new window 包含:

  1. AssertTest
  2. LifeCycleTests
  3. SuiteTests

可以通过, 包、类 选择方式聚合成 suite, 也通过 tag 进行选择执行, 这个有点类似 spring 里面 component scan, profile 设置。


// 将LifeCycleTests和AssertTest这两个类合并在一个分组中进行测试
@SelectClasses({LifeCycleTests.class, AssertTest.class})
// 也可以直接将多个包合并一个组中测试
// @SelectPackages({"com.dearxue.tester.suite"})
// 这个注解代表只测试含有DEV标签的测试类或者方法
@IncludeTags("PROD")
@Suite
@SuiteDisplayName("测试套件,分组测试")
public class SuiteTests {/*** <code>*     useJUnitPlatform {*         // includeTags 'fast'*         // excludeTags 'slow'*     }** </code>*/
}

#参考

  1. testNGopen in new window
  2. JUnit 5 Test Suites

我们

api-hug-contact

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

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

相关文章

VisualGLM-6B的部署步骤

对于如下命令&#xff0c;你将完全删除环境和环境中的所有软件包 conda remove -n env_name --all 一、VisualGLM-6B环境安装 1、硬件配置 操作系统&#xff1a;Ubuntu_64&#xff08;ubuntu22.04.3&#xff09; GPU&#xff1a;4050 显存&#xff1a;16G 2、配置环境 建…

授人以渔 选购篇九:扫地机器人(扫拖机器人)选购要点

文章目录 系列文章自动上下水导航技术&#xff1a;立体激光导航视觉导航&#xff0c;多传感器清洁能力&#xff1a;胶条刷、旋转拖布健康卫生&#xff1a;热水洗拖布、热风烘干智能功能品牌其他 系列文章 授人以渔 选购篇一&#xff1a;信用卡选购要点 授人以渔 选购篇二&…

2024华中杯C题光纤传感器平面曲线重建原创论文分享

大家好&#xff0c;从昨天肝到现在&#xff0c;终于完成了2024华中杯数学建模C题的完整论文啦。 给大家看一下目录吧&#xff1a; 目录 摘 要&#xff1a; 10 一、问题重述 12 二&#xff0e;问题分析 13 2.1问题一 13 2.2问题二 14 2.3问题三 14 三、模型假设 15 四、…

HWOD:字符串字符匹配

一、知识点 c语言中&#xff0c;判断一个字符串中是否含有某字符是很容易的&#xff0c;不需要知道字符串的长度 i0; while(c ! str[i] && str[i] ! \0){ i; } if(str[i] \0){ return false; } return true; 二、题目 1、描述 判断短字符串S中的所有字符…

闭包的概念总结与分析

1 定义 闭包又称词法闭包 闭包最早定义为一种包含和的实体. 在计算机科学中&#xff0c;闭包&#xff08;英语&#xff1a;Closure&#xff09;&#xff0c;又称词法闭包&#xff08;Lexical Closure&#xff09;或函数闭包&#xff08;function closures&#xff09;&#…

Redis: 在项目中的应用

文章目录 一、Redis的共享session应用二、分布式缓存1、缓存2、缓存一致性问题解决方案&#xff08;缓存更新策略&#xff09;&#xff08;1&#xff09;作用&#xff08;2&#xff09;三种策略&#xff08;3&#xff09;主动更新策略&#xff08;数据库、缓存不一致解决方案&a…

JavaScript系列:实用的数组比较方法

目录 引用比较的局限性 使用JSON.stringify()方法比较 使用Array.every()方法进行比较 结论 在JavaScript编程中&#xff0c;经常会遇到需要比较两个数组是否相等的场景。但是&#xff0c;由于JavaScript中数组是以引用方式比较&#xff0c;而非值比较&#xff0c;这使得直…

一切皆因数据

大语言模型在自然语言处理&#xff08;NLP&#xff09;领域取得突破性进展的原因&#xff1a;总体上&#xff0c;基本上都与数据集有关&#xff0c;庞大数据集带来巨大的挑战。可以说&#xff0c;数据的量的变化&#xff0c;带来的深度学习的质的飞跃。挑战与收益是并存的&…

汽车研发项目进度管理的挑战与优化策略

随着汽车行业的快速发展和市场竞争的加剧&#xff0c;新车型研发项目的进度管理成为车企赢得市场的关键。然而&#xff0c;由于汽车研发项目通常具有投资大、周期长、技术难度高、参与方众多等特点&#xff0c;项目进度管理面临着诸多挑战。为了提升车型研发效率、缩短研发周期…

Element-UI el-autocomplete带输入建议的输入框组件

文章目录 一、背景二、使用示例三、自定义使用四、全文本模糊匹配一、背景 当我们使用 el-select 可以下拉框搜索选择想要选中的值,但是却不能编辑选中的文本;使用 el-input 可以编辑文本,却没有建议可以选择。 为兼容二者的优点,可以使用 el-autocomplete,el-autocompl…

【K8s】:在 Kubernetes 集群中部署 MySQL8.0 高可用集群(1主2从)

【K8s】:在 Kubernetes 集群中部署 MySQL8.0 高可用集群(1主2从) 一、准备工作二、搭建nfs服务器2.1 安装 NFS 服务器软件包(所有节点执行)2.2 设置共享目录2.3 启动 NFS 服务器2.4 设置防火墙规则(可选)2.5 验证 NFS 服务器三、搭建部署mysql主节点3.1 创建命名空间3.2…

设计模式之创建型模式详解

设计模式 创建型模式 创建型模式(Creational Pattern)对类的实例化过程进行了抽象&#xff0c;能够将软件模块中对象的创建和对象的使用分离。为了使软件的结构更加清晰&#xff0c;外界对于这些对象只需要知道它们共同的接口&#xff0c;而不清楚其具体的实现细节&#xff0…

软考-系统集成项目管理中级--项目质量管理(输入输出很重要!!!本章占分较高,着重复习)

本章历年考题分值统计 本章重点常考知识点汇总清单 5、成本效益分析法:对每个质量活动进行成本效益分析&#xff0c;就是要比较其可能的成本与预期的效益。达到质量要求的主要效益包括减少返工、提高生产率、降低成本、提升干系人满意度及提升赢利能力。(掌握)17下64考题 本章…

贪吃蛇项目实战解析

项目实战 游戏背景​ 贪吃蛇是久负盛名的游戏&#xff0c;它也和俄罗斯方块&#xff0c;扫雷等游戏位列经典游戏的行列。 在编程语言的教学中&#xff0c;我们以贪吃蛇为例&#xff0c;从设计到代码实现来提升学生的编程能力和逻辑能力。 目录&#xff1a; 游戏背景 游戏效…

Java如何用EasyExcel插件对Excel进行数据导入和数据导出

文章目录 一、EasyExcel的示例导入依赖创建实体类数据导入和导出 二、EasyExcel的作用三、EasyExcel的注解 EasyExcel是一个阿里巴巴开源的excel处理框架&#xff0c;它以使用简单、节省内存著称。在解析Excel时&#xff0c;EasyExcel没有将文件数据一次性全部加载到内存中&…

【Flutter】自动生成图片资源索引插件二:FlutterAssetsGenerator

介绍 FlutterAssetsGenerator 插件 &#xff1a;没乱码&#xff0c;生成的图片索引命名是小驼峰 目录 介绍一、安装二、使用 一、安装 1.安装FlutterAssetsGenerator 插件 生成的资源索引类可以修改名字&#xff0c;我这里改成R 2. 根目录下创建assets/images 3. 点击image…

c#+unity基础

序列化&#xff1a; [SerializeField]&#xff0c;点不出来&#xff0c;只能在面板上显示绑定游戏物体 //公有隐藏 特有函数 特有函数&#xff1a;不需要调用&#xff0c;自动执行 Awake最先执行->OnEable 面向对象思想 面向对象思想&#xff1a;分为具体对象和抽象对…

LeetCode in Python 55. Jump Game (跳跃游戏)

跳跃游戏的游戏规则比较简单&#xff0c;若单纯枚举所有的跳法以判断是否能到达最后一个下标需要的时间复杂度为O()&#xff0c;为此&#xff0c;本文采用贪心策略&#xff0c;从最后一个下标开始逆着向前走&#xff0c;若能跳到第一个元素则表明可以完成跳跃游戏&#xff0c;反…

面向对象——类与对象

文章目录 类与对象构造函数、析构函数get/set方法函数&#xff1a;类内声明、类外定义static 类与对象 #include<iostream> #include<string> using namespace std; /* 类与对象 */ class Person{public:string name;// 固有属性&#xff0c;成员变量 int age;pu…

明文scheme拉起此小程序

微信开发文档说明&#xff1a;https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/url-scheme.html 1、开发者无需调用平台接口&#xff0c;在MP平台->设置->隐私与安全->明文Scheme拉起此小程序声明后&#xff0c;可自行根据如下格式拼接app…