go中如何进行单元测试案例

一. 基础介绍

1. 创建测试文件

  • 测试文件通常与要测试的代码文件位于同一个包中。
  • 测试文件的名称应该以 _test.go 结尾。例如,如果你要测试的文件是 math.go,那么测试文件可以命名为 math_test.go

2. 编写测试函数

  • 测试函数必须导入 testing 包。
  • 每个测试函数必须以 Test 开头,后跟一个首字母大写的名字,例如 TestSumTestSubtract
  • 测试函数的签名应该接受一个指向 testing.T 类型的指针:func TestXxx(t *testing.T) { ... }

3. 使用 t 对象进行断言和日志记录

  • t 对象用于记录测试信息和控制测试流程。
  • 使用 t.Errort.Errorf 报告失败,但继续执行当前测试。
  • 使用 t.Fatalt.Fatalf 报告失败并立即终止当前测试。

4. 运行测试

  • 在命令行中,进入包含测试文件的目录。
  • 执行 go test 命令运行所有测试,或使用 go test -v 以详细模式运行(打印每个测试的名字和运行状态)。
  • 使用 go test -run 加上正则表达式来运行特定的测试。例如,go test -run TestSum 仅运行名为 TestSum 的测试。

示例

假设有一个名为 math.go 的文件,其中定义了一个函数 Sum

goCopy code// math.go
package mathfunc Sum(a, b int) int {return a + b
}

创建一个名为 math_test.go 的测试文件,其中包含以下内容:

goCopy code// math_test.go
package mathimport "testing"func TestSum(t *testing.T) {total := Sum(5, 5)if total != 10 {t.Errorf("Sum was incorrect, got: %d, want: %d.", total, 10)}
}

然后在终端中运行 go testgo test -v 来执行测试。

二. 综合案例

  1. 结构

在这里插入图片描述

  1. monster.go

    package test_caseimport ("encoding/json""fmt""os"
    )type Monster struct {Name  string `json:"name"`Age   int    `json:"age"`Skill string `json:"skill"`
    }// Store 将其序列化保存为文件
    func (m *Monster) Store() bool {data, err := json.Marshal(m)if err != nil {fmt.Println("json parse Monster err ", err)return false}// 写入文件err = os.WriteFile("d:/monster.txt", data, 0666)if err != nil {fmt.Println("write file err ", err)return false}return true
    }// ReStore 反序列化文件
    func (m *Monster) ReStore() bool {data, err := os.ReadFile("d:/monster.txt")if err != nil {fmt.Println("read file err ", err)return false}// 将读取的数据进行反序列化err = json.Unmarshal(data, m)if err != nil {fmt.Println("json Unmarshal err ", err)return false}return true
    }
  2. monster_test.go

    package test_caseimport ("testing"
    )func TestStore(t *testing.T) {monster := &Monster{Name:  "小狐狸",Age:   200,Skill: "魅惑",}res := monster.Store()if !res {t.Fatalf("TestStore fail,expected is %v,but got %v", true, res)}t.Logf("TestStore 测试通过")}func TestReStore(t *testing.T) {monster := &Monster{} //空的结构体res := monster.ReStore() // 反序列化后结构体就有数据if !res {t.Fatalf("TestReStore fail,expected is %v,but got %v", true, res)}if monster.Name != "小狐狸" {t.Fatalf("TestStore fail,expected monster.Name is %v,but got %v", "小狐狸", monster.Name)}t.Logf("TestStore 测试通过")
    }
    

    在这里插入图片描述

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

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

相关文章

大模型LORA微调总结

大模型LORA微调总结 大模型微调总结模型加载使用deepspeed不使用deepspeed使用lora加载分词器 数据加载构建source和target构建input_ids和labels标签补齐构建训练器LORA模型推理模型加载多batch推理构建lora微调推理合并模型权重 大模型微调总结 模型加载 使用deepspeed mod…

2024年甘肃省职业院校技能大赛信息安全管理与评估 样题一 理论题

竞赛需要完成三个阶段的任务,分别完成三个模块,总分共计 1000分。三个模块内容和分值分别是: 1.第一阶段:模块一 网络平台搭建与设备安全防护(180 分钟,300 分)。 2.第二阶段:模块二…

一文让你对mysql索引底层实现明明白白

开篇: 图片是本人随笔画的,有点粗糙,望大家谅解,如有不对的地方,请联系我们,感谢 一、索引到底是什么 .索引是帮助mysql高效获取数据的排好序的数据结构 .索引是存储在文件里的 .数据结构: 二…

微信小程序怎么引入webview的url是本地的路径

当微信小程序访问类似http://10.27.0.15:8065/#/my这样的地址的时候会出问题。但是我们也不能每次把写的H5的代码发布在看效果啊? 只需要修改一个地方就可以啦。

Transformer 位置编码

✅作者简介:人工智能专业本科在读,喜欢计算机与编程,写博客记录自己的学习历程。 🍎个人主页:小嗷犬的个人主页 🍊个人网站:小嗷犬的技术小站 🥭个人信条:为天地立心&…

LLM(十)| Tiny-Vicuna-1B:Tiny Models轻量化系列Top One

在过去的一年里,见证了LLM的蓬勃发展,而模型的参数量也不断刷新记录,在2023年下半年,外界传言GPT-4是一个专家混合模型。因此,如果你想用人工智能做点什么,你需要IBM或NASA类似的计算能力:你怎么…

JAVA进化史: JDK16特性及说明

JDK 16于2021年3月发布。这个版本引入了一些新特性和改进,以下是其中一些主要特性 JEP 338: 引入了向量API(Vector API) 引入了向量API(Vector API),这是一个孵化器特性,用于提供更好地利用硬…

openharmony 编译LLVM编译器基础架构

1. 编译库地址 third_party_llvm-project: 管理员 liwentao_uiw dhy308 huanghuijin 2. 编译方法 git clone https://gitee.com/openharmony/third_party_llvm-project.gitcd third_party_llvm-projectmkdir buildcd buildcmake -G Ninja -DCMAKE_BUILD_TYPERelease ../llvm …

纯c++简易的迷宫小游戏

一个用c写的黑框框迷宫 适合新手入门学习 也适合大学生小作业 下面附上代码 总体思路 初始化游戏界面:设置迷宫的大小(WIDTH和HEIGH),生成迷宫地图(map),包括墙壁、空地、起点和终点。显示…

3、python布尔类型和条件表达式

使用布尔值进行分支逻辑! 文章目录 1.布尔类型1.1比较运算1.2组合布尔值2.条件语句2.1布尔转换1.布尔类型 Python有一种称为bool的变量类型。它有两个可能的值:True和False。 In [1]: x = True print(x) print(type(x)) True <class bool>除了直接在代码中使用True或…

【K12】Python写串联电阻问题的求解思路解析

问题源代码 方法&#xff1a;calculate_circuit_parameter 构造题目&#xff1a; 模板&#xff1a; 已知电阻R1为 10Ω&#xff0c;电阻R2为 5Ω&#xff0c;电压表示数为2.5V&#xff0c;求电源电压U&#xff1f; 给合上面题目&#xff0c;利用Python程序&#xff0c;可以任…

LeetCode 76.最小覆盖子串Java

题目链接 这个是滑动窗口问题比较难的了&#xff0c;不太好想。 我借鉴了这个大佬的思想&#xff0c;用更容易理解的方式实现了一下&#xff0c;可能时间复杂度有点提高。 代码搭配详解使用&#xff1a;题解 这个是我的题解 class Solution {public String minWindow(String …

【论文笔记合集】卷积神经网络之深度可分离卷积(Depthwise Separable Convolution)

本文作者&#xff1a; slience_me 我看的论文地址&#xff1a;MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications 内容 1. 标准卷积 假设输入为DFDFM&#xff0c;输出为输入为DFDFN&#xff0c;卷积核为DKDKM&#xff0c;共有N个卷积核进…

人机对话:程序设计,学哪种语言好?

人机对话&#xff1a;程序设计&#xff0c;学哪种语言好&#xff1f; 程序设计&#xff0c;学哪种语言好&#xff1f;学习目的&#xff1a;职业发展&#xff1a;个人兴趣&#xff1a; go语言怎么样&#xff1f;优点&#xff1a;缺点&#xff1a; 要开发手机APP&#xff0c;还需…

LeetCode刷题---随机链表的复制

解题思路&#xff1a; 使用哈希表来解决该问题 因为题中要求是深拷贝 首先对原链表遍历&#xff0c;将原链表每个节点和新链表每个节点形成对应关系&#xff0c;存入到哈希表中&#xff0c;key为原链表的节点&#xff0c;value为新链表的节点。 之后重置辅助链表指向原链表头节…

墨刀原型-实现轮播图功能

在墨刀中实现轮播图效果&#xff0c;可以按照以下步骤进行操作&#xff1a; 1.添加轮播图组件&#xff1a;在墨刀的组件面板中&#xff0c;找到轮播图组件并将其拖拽到画布上。 2.上传轮播图&#xff1a;在右侧的属性面板中&#xff0c;你可以上传你的轮播图图片。点击“”按钮…

动态pv(nfs方式挂载)

1、定义 发布pvc之后可以生成pv&#xff0c;还可以在共享服务器上直接生成挂载目录 pvc直接绑定和使用pv 2、动态pv依赖两个组件 &#xff08;1&#xff09;provisioner卷插件&#xff1a;k8s本身支持的动态pv创建不包括nfs&#xff0c;需要声明和安装一个外部插件provisio…

NET Core发布 HTTP Error 500.31 - Failed to load ASP.NET Core runtime

记录一下踩过的坑&#xff1a; 首先&#xff0c;不论是500.31还是500.30 &#xff0c;首先确保安装了三个文件 1.NET Core RunTime 2.NET SDK 3.NET Hosting 其次&#xff0c;确保三个文件的版本一致&#xff0c;如下&#xff1a; 要装就统一装同一个大版本&#xff0c;不要东…

Linux第28步_编译“修改正点原子TF-A源码中的Makefile并编译生成新的TF-A 固件”

了解学习内容&#xff1a; 1)、正点原子STM32MP157开发板使用的主控型号是STM32MP157DAA1&#xff1b; 2)、“linux /atk-mp1/atk-mp1/alientek_tf-a/tf-a-stm32mp-2.2.r1”目录下的文件是正点原子STM32MP157D开发板的“TF-A源码”。 3)、“linux /atk-mp1/atk-mp1/alientek…

字符串匹配

模板&#xff1a; KMP: 细节在代码中 看不懂的可以参照&#xff1a;如何更好地理解和掌握 KMP 算法? - 阮行止的回答 - 知乎 https://www.zhihu.com/question/21923021/answer/1032665486 package StringMatch.KMP;import java.util.ArrayList; import java.util.List;publ…