测试案例实例

一、hello

  • hello.go
package mainconst (spanish            = "Spanish"french             = "French"englishHelloPrefix = "Hello, "spanishHelloPrefix = "Hola, "frenchHelloPrefix  = "Bonjour, "
)func main() {
}
func Hello(name, language string) string {if name == "" {name = "World"}return greetingPrefix(language) + name
}
func greetingPrefix(language string) (prefix string) {switch language {case french:prefix = frenchHelloPrefixcase spanish:prefix = spanishHelloPrefixdefault:prefix = englishHelloPrefix}return
}
  • hello_test.go
package mainimport "testing"func TestHello(t *testing.T) {assertCorrectMessage := func(t *testing.T, got, want string) {//当测试失败时,报错不会显示真正的错误行数,而是会显示至 调用该辅助函数的位置t.Helper() //t.Helper() 需要告诉测试套件这个方法是辅助函数(helper)if got != want {t.Errorf("got '%q' want '%q'", got, want)}}//为西班牙语用户编写测试t.Run("in Spanish", func(t *testing.T) {got := Hello("Elodie", "Spanish")want := "Hola, Elodie"assertCorrectMessage(t, got, want)})t.Run("saying hello to people", func(t *testing.T) { // t.Run 用于在测试函数内部运行子测试got := Hello("Chris", "")want := "Hello, Chris"assertCorrectMessage(t, got, want)})t.Run("empty string defaults to 'world'", func(t *testing.T) {got := Hello("", "")want := "Hello, World"assertCorrectMessage(t, got, want)})
}

二、整数

package integersimport ("fmt""testing"
)func TestAdder(t *testing.T) {sum := Add(2, 2)expected := 4if sum != expected {t.Errorf("expected '%d' but got '%d'", expected, sum)}
}/*go test -v (显示详细信息)因为有这行注释  //Output:6  才会在terminal中输出
=== RUN   ExampleAdd
--- PASS: ExampleAdd (0.00s)
并且 添加注释  //Output:值  若给定output后的值 与 结果sum值不匹配 会报错
*/
func ExampleAdd() {sum := Add(1, 5)fmt.Println(sum)//Output:6
}
func Add(x, y int) int {return x + y
}

三、迭代

package iterationconst repeatCount = 5// 将字符串重复5次
func Repeat(character string) string {var repeatStr stringfor i := 0; i < repeatCount; i++ {repeatStr += character}return repeatStr
}

repeat_test.go

// repeat_test.go
package iterationimport ("fmt""testing"
)// 测试用例
func TestRepeat(t *testing.T) {repeated := Repeat("a")expected := "aaaaa"if repeated != expected {t.Errorf("expected '%s' got '%s'", expected, repeated)}
}// ExampleRepeat is a test function for Repeat.
func ExampleRepeat() {sum := Repeat("B")fmt.Println(sum)//Output: BBBBB
}// terminal: go test -bench="."
// 基准测试
func BenchmarkRepeat(b *testing.B) {for i := 0; i < b.N; i++ {Repeat("a")}
}

四、数组与切片

package go_testsimport ("reflect""testing"
)// go test -cover 命令用于运行测试并生成代码覆盖率报告func TestSumAllTails(t *testing.T) {checksSums := func(t *testing.T, got, want []int) {if !reflect.DeepEqual(got, want) {t.Errorf("got %v want %v ", got, want)}}t.Run("make the sums of some slices", func(t *testing.T) {got := SumAllTails([]int{1, 2}, []int{0, 9})want := []int{2, 9}checksSums(t, got, want)})t.Run("safely sum empty slices", func(t *testing.T) {got := SumAllTails([]int{1}, []int{0, 9})want := []int{0, 9}checksSums(t, got, want)})
}// 它会把每个切片的尾部元素相加(尾部的意思就是除去第一个元素以外的其他元素)。
func SumAllTails(numbersToSum ...[]int) []int {var sums []intfor _, v := range numbersToSum {if len(v) == 0 { //[]int{}sums = append(sums, 0)} else {tail := v[1:] //除了第一个不要sums = append(sums, Sum(tail))}}return sums
}
func TestSumAll(t *testing.T) {got := SumAll([]int{1, 2}, []int{0, 9})want := []int{3, 9}//测试或比较两个结构体、切片、映射等复杂数据结构的相等性。if !reflect.DeepEqual(got, want) { //got != wantt.Errorf("got %v want %v ", got, want)}
}// 这回我们需要一个 SumAll 函数,它接受多个切片,并返回由每个切片元素的总和组成的新切片。
func SumAll(numbersToSum ...[]int) []int {var sums []intfor _, v := range numbersToSum {sums = append(sums, Sum(v))}//如果你有一个容量为 2 的切片,但使用 mySlice[10]=1 进行赋值,会报运行时错误。//sums = make([]int, lengthOfNumbers)//for i, v := range numbersToSum {//	sums[i] = Sum(v)//}return sums
}// 我们创建一个 Sum 函数,它使用 for 来循环获取数组中的元素并返回所有元素的总和。
func TestSum(t *testing.T) {// 普通sum数组//t.Run("collection of 5 numbers", func(t *testing.T) {//	numbers := []int{1, 2, 3, 4, 5}//	got := Sum(numbers)//	want := 15//	if want != got {//		t.Errorf("got %d want %d given %v", got, want, numbers)//	}//})//动态sum数组t.Run("collection of any size", func(t *testing.T) {numbers := []int{1, 2, 3}got := Sum(numbers)want := 6if want != got {t.Errorf("got %d want %d given %v", got, want, numbers)}})
}func Sum(numbers []int) int {sum := 0for i, _ := range numbers {sum += numbers[i]}return sum
}

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

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

相关文章

Ensp AR/WLAN设备启动失败问题 错误代码41 解决方案

现象描述 启动AR设备之后&#xff0c;设备命令行无法接收输入&#xff0c;在长时间等待后一直输出“####”。启动AR/WLAN设备时&#xff0c;提示“…错误代码40…”。 检查虚拟网卡设置。 检查安装eNSP的PC上是否存在名为“VirtualBox Host-Only Network”的虚拟网卡。 - 如果…

【conda】pip安装报错,网络延时问题解决记录(亲测有效)

【conda】pip安装报错&#xff0c;网络延时问题解决记录 1. pip install 报错如下所示2. 解决方案&#xff1a; 1. pip install 报错如下所示 pip._vendor.urllib3.exceptions.ReadTimeoutError: HTTPSConnectionPool(hostfiles.pythonhosted.org, port443): Read timed out.…

AI文本生图模型Stable Diffusion部分模型叠加效果

兄弟们,最近有个烦恼,就是找图有点费事,干脆自己部署个文本生图模型Stable Diffusion,虽然机器性能慢,但是效果还可以,先和大家截图分享下,后面将映射ai.shenjian.online供大家免费使用 1. 效果预览 2. 主模型及插件安装 下载模型icerealistic_v21.safetensors放到./models/S…

Leetcode447. 回旋镖的数量

Every day a Leetcode 题目来源&#xff1a;447. 回旋镖的数量 解法1&#xff1a;枚举 哈希 题目所描述的回旋镖可以视作一个 V 型的折线。我们可以枚举每个 points[i]&#xff0c;将其当作 V\texttt{V}V 型的拐点。设 points 中有 m 个点到 points[i] 的距离均相等&#…

【笔记ing】Helm-3 主题-1 Chart

Chart Helm使用的包格式称为chart。chart就是一个描述Kubernetes相关资源的文件集合。单个chart可以用来部署一些简单的&#xff0c;类似于memcache pod&#xff0c;或者某些复杂的HTTP服务器以及web全栈应用、数据库、缓存等等。 chart是作为特定目录布局的文件被创建的。它们…

学习Java API(一):基础知识点一文通✅

推荐阅读 智能化校园&#xff1a;深入探讨云端管理系统设计与实现&#xff08;一&#xff09; 智能化校园&#xff1a;深入探讨云端管理系统设计与实现&#xff08;二&#xff09; 文章目录 推荐阅读API文档注释String类创建字符串拼接字符串格式化字符串String方法substring(…

Qt之QByteArray数值转换和输出

尽管QByteArray类是一个集合&#xff0c;但也可以作为一个特殊形式的数值来用&#xff0c;其灵活的转换格式可大大一方便各种格式数据转换与显示的需求&#xff0c;如显示二进制和十六进制、显示科学记数和指定小数位的数值。QByteArray类的公有静态函数number可以完成这些功能…

Vue.observable详解(细到原码)

文章目录 一、Observable 是什么二、使用场景三、原理分析参考文献 一、Observable 是什么 Observable 翻译过来我们可以理解成可观察的 我们先来看一下其在Vue中的定义 Vue.observable&#xff0c;让一个对象变成响应式数据。Vue 内部会用它来处理 data 函数返回的对象 返回…

项目进度管理

7过程 计划过程组6项&#xff1a;规划进度管理&#xff0c;定义活动&#xff0c;排列活动顺序&#xff0c;估算活动资源&#xff0c;估算活动持续时间&#xff0c;制定进度计划&#xff0c; 监控过程组1项&#xff1a;控制进度 1、规划进度管理&#xff0c; 对项目过程中管理…

定时任务-理论基础

什么是小顶堆 小顶堆&#xff08;Min Heap&#xff09;是一种特殊的二叉堆&#xff0c;它满足以下条件&#xff1a; 它是一个完全二叉树&#xff0c;即除了最后一层外&#xff0c;其他层的节点数都是满的&#xff0c;并且最后一层的节点从左到右依次排列。树中的每个节点的…

物联网智能控制器—福建蜂窝物联网科技有限公司

什么是物联网智能控制器&#xff1f; 物联网智能控制器是蜂窝物联自主研发的一种远程测控设备(RTU)&#xff0c;负责对现场信号、工业设备的监测和控制。本质上是一个模块化封装的微型计算机设备&#xff0c;将相应的一些功能进行了封装&#xff0c;无需进行电路设计和硬件程序…

Java多线程并发篇----第十二篇

系列文章目录 文章目录 系列文章目录前言一、ReentrantLock二、Condition 类和 Object 类锁方法区别区别三、tryLock 和 lock 和 lockInterruptibly 的区别前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章…

Python 网络爬虫入门详解

什么是网络爬虫 网络爬虫又称网络蜘蛛,是指按照某种规则在网络上爬取所需内容的脚本程序。众所周知,每个网页通常包含其他网页的入口,网络爬虫则通过一个网址依次进入其他网址获取所需内容。 优先申明:我们使用的python编译环境为PyCharm 一、首先一个网络爬虫的组成结构…

大括号内两行公式中,如何左对齐公式的条件

1. 先建立一个大括号&#xff0c;中间设置一个二维矩阵如下&#xff1a; 2. 选中整个矩阵&#xff0c;不要选外面的括号&#xff0c;进行如下操作 3. 选择左侧对齐 即可。

C++ std::string使用+=后追加变成了覆盖

背景 在进行OCR的rec的时候&#xff0c;读取了一个本地文件表加载到一个std::vector<std::string> labelList&#xff0c;然后循环把推理的结果转为为idx&#xff0c;使用labelList[i]获取当前字符的结果&#xff0c;再用一个外层的std::string resStr进行连接得到最后的…

微信小程序 - 模板与配置 介绍

文章目录 模板与配置一、WXML模板语法1、WXML模板语法 - 数据绑定2、WXML模板语法 - 事件绑定3、WXML模板语法 - 条件渲染4、WXML模板语法 - 列表渲染 二、WXSS模板样式1、WXSS模板样式 - rpx1.1 什么是 rpx 尺寸单位1.2 rpx 的实现原理1.3 rpx 与 px 之间的单位换算 2、WXSS模…

wechatpay-java 部署linux报错

ruoyimall部署linux环境报错 报错现象 org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name wechatPayService: Unsatisfied dependency expressed through field service; nested exception is org.springframework.beans.fa…

1024 科学计数法 (20)

科学计数法是科学家用来表示很大或很小的数字的一种方便的方法&#xff0c;其满足正则表达式 [-][1-9].[0-9]E[-][0-9]&#xff0c;即数字的整数部分只有 1 位&#xff0c;小数部分至少有 1 位&#xff0c;该数字及其指数部分的正负号即使对正数也必定明确给出。 现以科学计数…

南京观海微电子----时序图绘制工具

Wavedrom 是一款功能强大且简单易用的文本转图表工具&#xff0c;被广泛应用于生成时序图、波形图等交互式波形。其特点在于使用简单的文本语法&#xff0c;使得开发人员能够以可视化的方式表示数字信号和时间序列数据。Wavedrom 的优势在于其高度灵活性和可扩展性&#xff0c;…

【数据库】聊聊MySQL事务隔离级别与锁机制

概述 针对事务来说&#xff0c;其实主要解决的就是数据的一致性&#xff0c;对于任何的存储中间件来说&#xff0c;都会存在并发访问数据的问题&#xff0c;编程语言层面 juc、go等机制 使用编程上的方式&#xff0c;加锁、无锁编程等。而数据库也存在多个连接访问修改同一个数…