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,一经查实,立即删除!

相关文章

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

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

微信小程序怎么引入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类似的计算能力:你怎么…

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

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

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

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

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

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

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

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

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

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

动态pv(nfs方式挂载)

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

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

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

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

了解学习内容: 1)、正点原子STM32MP157开发板使用的主控型号是STM32MP157DAA1; 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…

后台生成随机验证码验证登录

web get请求获取图片 <div class"p2"><img id"imgId" src"/get/code"><a href"#">看不清&#xff0c;换一张</a> </div> 后台代码: /*获取动态验证码*/ ResponseBody RequestMapping(value "/…

【MATLAB源码-第113期】基于matlab的孔雀优化算法(POA)机器人栅格路径规划,输出做短路径图和适应度曲线。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 POA&#xff08;孔雀优化算法&#xff09;是一种基于孔雀羽毛开屏行为启发的优化算法。这种算法模仿孔雀通过展开其色彩斑斓的尾羽来吸引雌性的自然行为。在算法中&#xff0c;每个孔雀代表一个潜在的解决方案&#xff0c;而…

人工智能专业必须需要考哪些证书呢?

我们来看看2024年人工智能专业的企业和个人都在紧张报考的两项AI认证证书报考&#xff1a; 为进一步贯彻落实中共中央印发《关于深化人才发展体制机制改革的意见》和国务院印发《关于“十四五”数字经济发展规划》等有关工作的部署要求&#xff0c;深入实施人才强国战略和创新驱…

Django教程第5章 | Web开发实战-数据统计图表(echarts、highchart)

专栏系列&#xff1a;Django学习教程 前言 highchart&#xff0c;国外。 echarts&#xff0c;国内。 本项目集成 hightchart和echarts图表库实现数据统计功能。 包括&#xff1a;折线图&#xff0c;柱状图&#xff0c;饼图和数据集图。 效果图 echats Highcharts 源代码…

程序员如何保持竞争力

在程序员的职业生涯中&#xff0c;保持竞争力是非常重要的&#xff0c;因为技术行业不断发展和变化。以下是一些建议&#xff0c;可以帮助程序员保持竞争力&#xff1a; 持续学习新技术和编程语言&#xff1a;技术行业的发展非常快&#xff0c;新的编程语言和技术不断涌现。作为…

易点易动设备管理系统:提升企业设备能耗管理效率的不二之选

在当前环保意识日益增强的社会背景下&#xff0c;企业对设备能耗管理的重视程度不断提升。有效的能耗管理不仅可以减少企业的能源消耗和环境污染&#xff0c;还能降低生产成本和提升竞争力。为了帮助企业实现高效的设备能耗管理&#xff0c;易点易动设备管理系统应运而生。本文…

高级分布式系统-第15讲 分布式机器学习--概念与学习框架

高级分布式系统汇总&#xff1a;高级分布式系统目录汇总-CSDN博客 分布式机器学习的概念 人工智能蓬勃发展的原因&#xff1a;“大” 大数据&#xff1a;为人工智能技术的发展奠定了坚实的物质基础。 大规模机器学习模型&#xff1a;具备超强的表达能力&#xff0c;可以解决…

通过IDE和jar包运行时加载json配置文件

程序中使用了json配置文件&#xff0c;位置在$rootPath/src/main/resources/config.json, 调试时使用IDE&#xff0c;但运行时使用Jar包&#xff0c;加载config.json配置文件的代码如下&#xff1a; public ConfigParser(String configFileName) throws IOException {try{Inp…