Golang测试func TestXX(t *testing.T)的使用

news/2024/9/18 12:08:54/ 标签: golang

一般Golang中的测试代码都以xxx_test.go的样式,在命名测试函数的时候以Testxx开头。
以下是我写的一个单元:

package testsimport "strings"func Split(s, sep string) (res []string) {i := strings.Index(s, sep)for i > -1 {res = append(res, s[:i])s = s[i+len(sep):]i = strings.Index(s, sep)}res = append(res, s)return
}

第一种测试方法:

func TestSplit(t *testing.T) {inputs := Split("a:b:c", ":")want := []string{"a", "b", "c"}if !reflect.DeepEqual(inputs, want) {t.Errorf("inputs:%v, want:%v", inputs, want)}
}

这种直接定义好输入、期望值,进行对比,这种不适合大量数据比较。

第二种测试方法:

func TestSplit(t *testing.T) {testCases := []struct {input stringsep   stringwant  []string}{{input: "a:b:c", sep: ":", want: []string{"a", "b", "c"}},{input: "a:b:c", sep: ",", want: []string{"a:b:c"}},{input: "abcd", sep: "bc", want: []string{"a", "d"}},}for _, tc := range testCases {got := Split(tc.input, tc.sep)if !reflect.DeepEqual(got, tc.want) {t.Errorf("期望值:%v,实际值:%v\n", tc.want, got)}}
}

使用结构体测试,然后使用for range遍历,是比较方便的方式,但是如果我的测试数据很多,但是我其中一个测试出现错误了,我现在需要找到那一个,那么这个方式就有点不适用了。

第三种测试方法(推荐使用):

func TestSplit(t *testing.T) {testCases := map[string]struct {input stringsep   stringwant  []string}{"one":   {input: "a:b:c", sep: ":", want: []string{"a", "b", "c"}},"two":   {input: "a:b:c", sep: ":", want: []string{"a", "b", "c"}},"three": {input: "a:b:c", sep: ":", want: []string{"a", "b", "c"}},"four":  {input: "a:b:c", sep: ":", want: []string{"a", "b", "c"}},"five":  {input: "a:b:c", sep: ":", want: []string{"b", "b", "c"}},}for name, tc := range testCases {t.Run(name, func(t *testing.T) {got := Split(tc.input, tc.sep)if !reflect.DeepEqual(got, tc.want) {t.Errorf("期望值:%v,实际值:%v", tc.want, got)}})}
}

在这里插入图片描述

这里我们使用子测试的方法,主要可以看到第五个测试案例直接报错,信息并显示出来。

同样,也有一些其他的测试方法,后续如果了解更多的话,在这里补上。


http://www.ppmy.cn/news/1516440.html

相关文章

ASAM OpenX系列标准

ASAM OpenX系列标准是由德国自动化及测量系统标准协会(ASAM)制定的一系列标准,旨在推动自动驾驶仿真测试领域的发展。该系列标准涵盖了仿真测试场景的不同方面,为自动驾驶技术的研发、测试和验证提供了统一的规范和框架。以下是对…

Dopamine(多巴胺)越狱工具一键越狱教程:支持 iOS 15-iOS 16.6.1 设备

Dopamine(多巴胺)越狱工具由巨魔商店 TrollStore 的作者 opa334 联合 ellekit 开发,是公开的一个开源越狱工具,面向所有人员使用。用户可通过爱思助手“一键越狱”安装此工具进行越狱,操作更加便捷,以下是相…

ffmpeg教程及加速视频转码

ffmpeg教程及加速视频转码 1、ffmpeg简介: ffmpeg来自MPEG视频编码标准。 是一套可以用来记录,转换数字音频、视频,并能将其转化为流的开源计算机程序。 可以轻易的实现多种视频格式之间的相互转换。 2、基础知识: 容器、文件…

ZooKeeper--基于Kubernetes部署ZooKeeper

ZooKeeper 服务 服务类型: 无头服务(clusterIP: None),这是 StatefulSet(有状态集)必需的配置。 端口: 2181 (客户端): 用于客户端连接。 2888 (跟随者): 用于 ZooKeeper 服务器之间的连接。 3888 (领导者): 用于领导者…

多平台谷歌浏览器驱动下载地址分享

多平台谷歌浏览器驱动下载地址分享 一、概述二、windows、linux、mac平台下载地址2.1windows平台下载地址2.2linux、mac平台下载地址 三、arm平台下载地址参考文档 一、概述 在使用一些自动化网页测试工具时,往往需要下载谷歌浏览器驱动文件,用于配合工…

虚幻5|按键触发学习

一,如图参考 1.下移 驱动阈值 越大按时间长才会触发,越小很快就可以触发 2.按下 当按下超出驱动阈值大小就会触发一次,这里的驱动阈值只能设置再0.1~1的大小 3.已松开 当按下的时候,先触发单次的started,如果按压…

[多线程] linux中的线程调度策略

文章目录 多线程调度如何设置调度策略Reference 多线程调度 包含5种线程调度: SCHED_OTHER:SCHED_FIFO:SCHED_RR:SCHED_BATCH:SCHED_IDLE: 如何设置调度策略 在Linux系统中,线程调度策略可以…

分组汇总后再根据数量拼上不同文字

Excel某表格有2列。 AB1Apples32Apples03Bananas14Bananas65Cantaloupe06Kiwis27Kiwis28Kiwis1 要求:按第1列分组,如果组内第2列大于0则对当前行进行计数,否则不计数;计数结果等于1则附加Occurrence,否则附加 Occurr…

一个php快速项目搭建框架源码,带一键CURD等功能

介绍: 框架易于功能扩展,代码维护,方便二次开发,帮助开发者简单高效降低二次开发成本,满足专注业务深度开发的需求。 百度网盘下载 图片:

OpenGL3.3_C++_Windows(36)

PBR_IBL镜面部分 镜面部分并不能像漫反射部分一样将常量提取出来,因为它受到wi和w0的影响,就比如一个x的等式,不能把x部分提取出来一样,他是随着等式变化的但是如果放在等式中,计算所有的可能性,计算量会极…

大模型网络安全能力和风险评估框架Cybench

大模型网络安全能力和风险评估框架Cybench 前言 语言模型在网络安全领域的双重应用,既可以用于攻击(如识别并利用代码漏洞),也可以用于防御(如渗透测试和漏洞检测)。当前的研究包括对CTF挑战、代码片段中的…

100101-批量将指定文件夹下视频时长快进或慢放到指定时长,指定比例尺寸,例如将50S视频转为1:1尺寸的30S-UI

程序功使用环境▶适用的系统环境说明:win7以上64位win系统注意:win32位系统/mac系统需要额外定制▶使用期限:无需注册、不绑电脑、无时间限制▶如何安装:不需要安装程序功能说明▶子文件夹穿透:支持▶支持的文件格式&a…

graphRAG原理解析——基于微软graphRAG+Neo4j llm-graph-builder

知识图谱生成 llm-graph-builder(以下简称 LGB)也使用了最新的 graph RAG 的思路,使用知识图谱来加持RAG,提供更加准确和丰富的知识问答。知识图谱的生成上,利用大模型的泛化能力来自动生成和构建知识图谱&#xff0…

Qt使用usbcan通信

一.usbcan环境搭建 可以参照我的这篇博客&#xff1a;USBCAN-II/II使用方法以及qt操作介绍 二.项目效果展示 三.项目代码 这部分代码仅仅展示了部分功能&#xff0c;仅供参考。 #include"ControlCAN.h" #include<QDebug> #include <windows.h> #incl…

《Clean Code《代码整洁之道》解读

《Clean Code》&#xff08;《代码整洁之道》&#xff09;是软件开发领域的经典著作&#xff0c;由知名软件工程师Robert C. Martin&#xff08;又称"Uncle Bob"&#xff09;编写。本书详细探讨了如何编写整洁、易于维护、可读性强的代码。对于任何软件项目的长期维护…

el-form只对rules中个别字段进行校验

正常属性校验方式 const moveToErr () > {const errorDom document.getElementsByClassName(el-form-item__error);console.log(errorDom)if (errorDom.length) {errorDom[0].scrollIntoView({block: center,behavior: smooth})} };const saveItem async (formEl?: For…

机器学习——决策树,朴素贝叶斯

一.决策树 决策树中的基尼系数&#xff08;Gini Index&#xff09;是用于衡量数据集中不纯度&#xff08;或混杂度&#xff09;的指标。基尼系数的取值范围在0到0.5之间&#xff0c;其中0表示数据完全纯&#xff08;同一类别&#xff09;&#xff0c;0.5表示数据完全混杂。 基…

linux下部署数据库总结

数据库 数据库主要分为两大类&#xff1a;关系型数据库与 NoSQL 数据库 关系型数据库&#xff0c;是建立在关系模型基础上的数据库&#xff0c;其借助于集合代数等数学概念和方法来处理数据库 中的数据主流的 MySQL、Oracle、MS SQL Server 和 DB2 都属于这类传统数据库。 NoSQ…

大数据挖掘的步骤是怎样的呢?

大数据挖掘是一个复杂而系统的过程&#xff0c;它利用计算机科学的方法和技术&#xff0c;对大量、多样化、高速增长的数据进行深入挖掘&#xff0c;以发现有价值的信息和知识。以下是大数据挖掘的主要步骤和方法&#xff1a; 一、大数据挖掘的步骤 数据收集&#xff1a; 从各…

[Meachines] [Easy] BoardLight Dolibarr17.0.0-RCE+Enlightenment v0.25.3权限提升

信息收集 IP AddressOpening Ports10.10.11.11TCP:22,80 $ nmap -p- 10.10.11.11 --min-rate 1000 -sC -sV PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 8.2p1 Ubuntu 4ubuntu0.11 (Ubuntu Linux; protocol 2.0) | ssh-hostkey: | 3072 06:2…