junit单元测试:使用@ParameterizedTest 和 @CsvSource注解简化单元测试方法

        在平常的开发工作中,我们经常需要写单元测试。比如,我们有一个校验接口,可能会返回多种错误信息。我们可以针对这个接口,写多个单元测试方法,然后将其场景覆盖全。那么,怎么才能写一个测试方法,就将其涉及到的场景测试全呢?

        1:例如:有一个校验身份证号的接口,涉及业务场景:身份证号为空校验,身份证号是否正确。那么在单元测试的时候,需要测试身份证号为空的数据、身份证号格式错误的数据和身份证号格式正确的数据。

        2:业务代码实现:

package test.boot.service.impl;

import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import test.boot.dao.StudentDao;
import test.boot.service.StudentService;
import test.boot.vo.StuentVO;

@Service
public class StudentServiceImpl implements StudentService {

    @Autowired
    private StudentDao studentDao;

    public String checkIdNo(String idNo) {
        String regex = "^\\d{17}[0-9Xx]$";
        if (StringUtils.isBlank(idNo)) {
            return "身份证号为空";
        }
        if (idNo.matches(regex)) {
            return "身份证号格式正确";
        } else {
            return "身份证号格式错误";
        }
    }

}

        3:涉及三种场景,单元测试怎么写呢?可能我们会写三个单元测试的方法,如下:

@Test
public void testCheckIdNoEmpty() {
     String result = new StudentServiceImpl().checkIdNo("");
     Assert.assertEquals("身份证号为空", result);
}
@Test
public void testCheckIdNoFormatSuc() {
     String result = new StudentServiceImpl().checkIdNo("666777199911112222");
     Assert.assertEquals("身份证号格式正确", result);
}
@Test
public void testCheckIdNoFormatError() {
    String result = new StudentServiceImpl().checkIdNo("345678889");
    Assert.assertEquals("身份证号格式错误", result);
}

        4:上述写法没有任何问题,如果我们需要测很多个接口,涉及到的业务场景有很多,那么看单元测试的时候,很难发现场景是否覆盖完全,那么我们是否可以优化为一个方法呢?如下:使用 @ParameterizedTest 和 @CsvSource 注解,@ParameterizedTest表示参数注册,也表示单元测试,@ParameterizedTest 和 @Test不能同时使用,@CsvSource 表示多参数注解,可以用分隔符分割数据。

        5:使用 @ParameterizedTest 和 @CsvSource 注解,可以用一个方法,即可测所有场景,我们可以传入两个参数,一个是身份证号,一个是预期结果。代码如下:

@ParameterizedTest
@CsvSource({"'', '身份证号为空'",
             "'610222199911115511', '身份证号格式正确'",
             "'61022219991111551X', '身份证号格式正确'",
             "'6102221999111', '身份证号格式错误'"})
public void testCheckIdNo(String idNo, String expected) {
     StudentService studentService = new StudentServiceImpl();
     String result = studentService.checkIdNo(idNo);
     Assert.assertEquals(expected, result);
}

执行结果:

        不断的学习,才能让自己变得更好!美好的风景一直在路上,加油!

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

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

相关文章

实验笔记之——基于Linux服务器复现Instant-NGP及常用的tmux指令

之前博客实现了基于windows来复现Instant-NGP,本博文在linux服务器上测试 实验笔记之——基于windows复现Instant-NGP-CSDN博客文章浏览阅读444次,点赞15次,收藏7次。之前博客对NeRF-SLAM进行了调研,本博文先复现一下Intant-NGP。…

C++开发小技巧

C开发一些小技巧 积累一些能用得到的C开发小技巧。 错误码/状态码 错误码/状态码在项目很常见,用于提示错误类型、状态,通常还会附带一些相关描述。通常错误码是统一管理的,例如使用宏或者枚举定义。 平时我的做法 使用宏或者枚举定义错…

rust 注释文档生成 cargo doc

rust的cargo文档生成 只需要在每个函数写清楚注释,就可以自动生成文档,很方便 即不用写文档,又可以快速查看,是开发rust的必备技能 rust安装和开发环境配置,可以参考:链接 1.写注释的方法 连续三个 \ 即…

springboot + vue3实现增删改查分页操作

springboot vue3实现增删改查分页操作 环境最终实现效果实现功能主要框架代码实现数据库后端前端 注意事项 环境 jdk17 vue3 最终实现效果 实现功能 添加用户,禁用,启用,删除,编辑,分页查询 主要框架 后端 spri…

在vue3中使用Cesium保姆篇

1.首先新建一个vue项目 Vue.js - 渐进式 JavaScript 框架 | Vue.js 可以直接到管网中查看命令通过npm来创建一个vue3的项目 然后通过命令下载1.99的版本的cesium和plugin npm i cesium1.99 vite-plugin-cesium 下载完了以后 2.引入cesium 首先找到vue的vite.config.js …

技术资讯:谷歌最新发布!2023年度最受欢迎的Chrome扩展榜单

大家好,我是大澈! 本文约1300字,整篇阅读大约需要2分钟。 感谢关注微信公众号:“程序员大澈”,免费领取"面试礼包"一份,然后免费加入问答群,从此让解决问题的你不再孤单&#xff01…

windows 在指定目录下打开 cmd,不用层层进入

一、进入需要打开的目录下 二、在选中的状态下,输入 cmd,然后回车即可

63.接口安全设计(活动管理系统:三)

文章目录 一、参数校验二、统一封装返回值三、做权限控制四、加验证码五、 限流六、加ip白名单七、校验敏感词八、使用https协议九、数据加密十、做风险控制 在日常工作中,开发接口是必不可少的事情,无论是RPC接口还是HTTP接口,我们都应该考虑…

x-cmd pkg | trafilatura - 网络爬虫和搜索引擎优化工具

目录 简介首次用户技术特点竞品和相关作品进一步阅读 简介 trafilatura 是一个用于从网页上提取文本的命令行工具和 python 包: 提供网络爬虫、下载、抓取以及提取主要文本、元数据和评论等功能可帮助网站导航和从站点地图和提要中提取链接无需数据库,输出即可转换…

python总结高阶-文件

文章目录 文件操作文本文件和二进制文件1 文本文件2 二进制文件 文件操作相关模块创建文件对象open()文本文件的写入基本的文件写入操作常用编码介绍write()/writelines()写入数据close()关闭文件流with语句(上下文管理器) 文本文件的读取read([size])readline()readlines() 二…

用友U8 Cloud smartweb2.RPC.d XXE漏洞复现

0x01 产品简介 用友U8 Cloud 提供企业级云ERP整体解决方案,全面支持多组织业务协同,实现企业互联网资源连接。 U8 Cloud 亦是亚太地区成长型企业最广泛采用的云解决方案。 0x02 漏洞概述 用友U8 Cloud smartweb2.RPC.d接口处存在 XXE漏洞,攻击者可通过该漏洞获取敏感文件…

Typora 编辑器 讲解 包括使用方式 快捷键 附带下载地址 (免费破解)

CSDN 成就一亿技术人! 今天来讲一下很好用的编辑器 Typora CSDN 成就一亿技术人! 什么是Typora? 它是一个 Markdown 编辑器和阅读器,这意味着您可以使用简单的格式代码 (Markdown)是一种轻量级标记语言&…

安科瑞汽车充电桩在西北地区的应用——安科瑞 顾烊宇

摘要:“十四五”是经济发展追赶超越的关键时期,将进一步促进电动汽车及充电市场的繁荣发展。目前我国正处于转型发展的关键时期,在“新基建”的推动下,新能源汽车充电桩的建设将迎来发展机遇。本文首先通过统计、分析西部城市某辖…

bat批处理文件_bat注释汇总

文章目录 1、示例(直接结合脚本和结果进行理解) 1、示例(直接结合脚本和结果进行理解) %这是一个注释% %这是另一个注释%rem 这是一个注释 rem 这是另一个注释:这是一个注释 ::这是一个注释 :?这是另一个注释if 1 1 ( %这里会执…

VMware 安装 macOS虚拟机(附工具包)

VMware 安装 macOS虚拟机,在Windows上体验苹果macOS系统! 安装教程:VMware 安装 macOS虚拟机VMware Workstation Pro 是一款强大的虚拟机软件,可让您在 Windows 电脑上运行 macOS 系统。只需简单几步操作,即可轻松安装…

大型语言模型的幻觉问题

1.什么是大模型幻觉? 在语言模型的背景下,幻觉指的是一本正经的胡说八道:看似流畅自然的表述,实则不符合事实或者是错误的。 幻觉现象的存在严重影响LLM应用的可靠性,本文将探讨大型语言模型(LLMs)的幻觉问题&#x…

Mybatis-Plus乐观锁配置使用流程【OptimisticLockerInnerInterceptor】

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家:人工智能学习网站 1.乐观锁实现 1.配置插件 1.XML方式 <bean class"com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerI…

CRM如何精确控制RT设备和与UMD通信笔记

1 CRM工作职责 监控link req是否得到schedule监控link上各个device的req是否ready监控SOF或EOF的trigger信号&#xff0c;决定各个设备配置哪个req 2 CRM如何精确控制RT设备 分两步&#xff0c;一是crm知道某帧req的link dev准备好了&#xff0c;可以做apply setting。 二是…

获取小红书笔记详情API调用说明(含请求示例参数说明)

前言 小红书&#xff0c;是一个引领全球时尚潮流的社交电商平台。在这里&#xff0c;你可以发现世界各地的优质好物&#xff0c;从美妆护肤、穿搭时尚&#xff0c;到家居生活、旅行美食&#xff0c;一切应有尽有。同时&#xff0c;这里也是一个分享生活点滴的平台&#xff0c;…

YOLOv5+混合注意力机制再涨4.3%,Transformer混合设计依旧可以卷

在工业生产过程中&#xff0c;由于低效率、不统一的评估、高成本以及缺乏实时数据&#xff0c;传统的手动检测焊接缺陷不再被应用。 为了解决表面贴装技术中焊接缺陷检测的低准确率、高误检率和计算成本问题&#xff0c;提出了一种新方法。该方法是一种专门针对焊接缺陷检测算法…