新闻中心
如何在Golang中测试结构体方法_Golang结构体方法单元测试方法
Golang中对结构体方法单元测试需用testing包编写TestXxx函数,构造实例调用方法并比对结果,测试文件名须为*_test.go且同包,推荐用t.Run组织子测试覆盖边界情况。

在 Golang 中对结构体方法进行单元测试,核心是通过 testing 包编写测试函数,验证方法的行为是否符合预期。关键在于构造结构体实例、调用其方法,并比对输出结果。
准备被测结构体和方法
假设我们有一个表示用户信息的结构体 User,并定义了方法 GetFullName 和 IsAdult:
<span style="color:blue;">package</span> main
<span style="color:blue;">type</span> User <span style="color:blue;">struct</span> {
FirstName <span style="color:blue;">string</span>
LastName <span style="color:blue;">string</span>
Age <span style="color:blue;">int</span>
}
<span style="color:blue;">func</span> (u *User) GetFullName() <span style="color:blue;">string</span> {
<span style="color:blue;">return</span> u.FirstName + " " + u.LastName
}
<span style="color:blue;">func</span> (u *User) IsAdult() <span style="color:blue;">bool</span> {
<span style="color:blue;">return</span> u.Age >= 18
}
编写单元测试文件
创建同名目录下的测试文件,例如 user_test.go,使用 testing 包进行测试。
简小派
简小派是一款AI原生求职工具,通过简历优化、岗位匹配、项目生成、模拟面试与智能投递,全链路提升求职成功率,帮助普通人更快拿到更好的 offer。
123
查看详情
<span style="color:blue;">package</span> main
<span style="color:blue;">import</span> (
<span style="color:#a31515;">"testing"</span>
)
<span style="color:blue;">func</span> TestUser_GetFullName(t *testing.T) {
user := &User{
FirstName: <span style="color:#a31515;">"John"</span>,
LastName: <span style="color:#a31515;">"Doe"</span>,
}
fullName := user.GetFullName()
<span style="color:blue;">if</span> fullName != <span style="color:#a31515;">"John Doe"</span> {
t.Errorf(<span style="color:#a31515;">"期望 'John Doe',实际 '%s'"</span>, fullName)
}
}
<span style="color:blue;">func</span> TestUser_IsAdult(t *testing.T) {
tests := []<span style="color:blue;">struct</span> {
name <span style="color:blue;">
string</span>
age <span style="color:blue;">int</span>
want <span style="color:blue;">bool</span>
}{
{<span style="color:#a31515;">"成年人"</span>, 20, <span style="color:blue;">true</span>},
{<span style="color:#a31515;">"未成年人"</span>, 16, <span style="color:blue;">false</span>},
{<span style="color:#a31515;">"刚好成年"</span>, 18, <span style="color:blue;">true</span>},
}
<span style="color:blue;">for</span> _, tt := <span style="color:blue;">range</span> tests {
t.Run(tt.name, <span style="color:blue;">func</span>(t *testing.T) {
u := &User{Age: tt.age}
<span style="color:blue;">if</span> got := u.IsAdult(); got != tt.want {
t.Errorf(<span style="color:#a31515;">"IsAdult() = %v, want %v"</span>, got, tt.want)
}
})
}
}
运行测试
在项目根目录执行命令:
go test -v
输出会显示每个测试用例的执行情况。如果所有断言通过,测试成功。
关键点总结:- 测试文件命名应为
*_test.go,且与原文件在同一包中 - 测试函数以
TestXxx开头,参数为*testing.T - 使用
t.Run实现子测试,便于区分多个场景 - 通过构造结构体实例调用方法,验证返回值或状态变化
- 避免测试私有字段或实现细节,只关注公共行为
以上就是如何在Golang中测试结构体方法_Golang结构体方法单元测试方法的详细内容,更多请关注其它相关文章!
# 中文网
# 销售网站平台建设方案
# 郑州网站网络营销优化
# 侯马网站建设方案
# 齐齐哈尔网络营销推广
# 官方认证二手车推广网站
# 白酒seo推广哪家好
# 海北州商城网站建设
# 来宾市网站建设
# 山东360关键词排名
# 知名网站建设优势
# 解决问题
# go
# 相关文章
# 多个
# 检测方法
# 比对
# 如何在
# 中对
# 布尔
# 单元测试
# ai
# golang
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
J*aScript中赋值与自增运算符的复杂交互与执行机制
QQ邮箱在线使用入口 QQ邮箱个人账号网页版登录
Win10磁盘清理工具在哪 Win10打开并使用磁盘清理【教程】
中兴BladeV30怎样用测距估书架层高_iPhone中兴BladeV30测距估书架层高【家装参考】
支付宝如何设置安全保护_支付宝安全设置的全面教程
Basecamp怎样用留言钉固定重点_Basecamp用留言钉固定重点【重点标记】
iwriter统一登录平台 iwrite账号密码登录页面
服务端验证_j*ascript输入检查
解决macOS上安装pyhdf时‘hdf.h’文件缺失的编译错误
Golang如何优化内存分配与垃圾回收_Golang内存管理与GC优化实践
外媒分析《GTA6》定价:卖100美元可以但真没必要!
ExcelARRAYTOTEXT函数怎么自定义分隔符输出数组文本_ARRAYTOTEXT实现动态生成SQL语句
composer的"require-dev"部分是用来做什么的?
基于动态规划的房屋花卉种植最小成本算法详解
在命令行怎么运行html项目_命令行运行html项目方法【教程】
Golang切片为何属于引用类型_Golang slice底层结构与引用语义说明
夸克浏览器桌面版同步不了书签怎么处理 夸克浏览器跨设备同步异常解决方案
深入理解Go语言中的指针类型:以*string为例
在J*a中如何开发简易博客标签推荐系统_博客标签推荐项目实战解析
css绝对定位元素脱离父容器怎么办_确保父元素position非static
京东单号查询入口_京东快递订单追踪入口
解决Rails应用中内容错位与Turbo警告:meta标签误用导致富文本渲染异常
高德地图公交到站提醒失败如何解决 高德提醒权限设置
Python:递归比较文件夹内容并找出特定类型文件的差异
poki免费入口快捷访问 poki人气小游戏直接玩站点
vivo云服务网页版登录 怎么登录vivo云服务网页版
树莓派传感器触发:通过Twilio API发送WhatsApp消息教程
XML中包含HTML标签导致解析错误? 正确嵌入非XML数据的两种方法
vivo浏览器自带的下载器速度慢怎么办 vivo浏览器提升文件下载速度的技巧
蛙漫画网页版全站入口 蛙漫热门作品免费浏览
css滚动动画效果怎么实现_使用Animate.css滚动触发动画类
知音漫客官网漫画下载_知音漫客网页版阅读记录
荒野行动PC版怎么注册_荒野行动PC版账号注册详细流程图文教程
微信网页版官方入口直达 微信网页版网页版登录使用方法
QQ网页版官方账号入口 QQ网页版网页版登录指南
如何使用 Excel 发布器与 Power BI 分享 Excel 洞察
J*aScript 字符串标签转换:使用正则表达式高效替换
React项目中导航栏Logo自适应布局:避免裁剪与布局溢出
J*aScript实现单选按钮与关联输入框的联动禁用教程
QQ邮箱登录首页官网地址2026 QQ邮箱官方网页入口
如何更改在 Excel 中打开超链接时的默认浏览器
Win10如何恢复误删的快捷方式_Win10重建常用软件快捷方式
J*aScript数组对象转换:按指定键分组与值收集
mcjs网页版流畅运行 mcjs低配电脑畅玩入口
C++如何实现异步操作_C++11使用std::future和std::async进行异步编程
Golang如何实现Web接口签名验证_Golang Web接口签名校验开发方法
初次安装JDK时环境变量如何正确配置_J*A_HOME与PATH设置规则讲解
MAC怎么让Dock栏只显示当前运行的应用_MAC终端命令实现极简Dock栏
163邮箱网页版入口导航平台 163邮箱网页版登录入口官网导航
MongoDB聚合管道:正确匹配对象数组中_id的方法


2025-12-06
浏览次数:次
返回列表
string</span>
age <span style="color:blue;">int</span>
want <span style="color:blue;">bool</span>
}{
{<span style="color:#a31515;">"成年人"</span>, 20, <span style="color:blue;">true</span>},
{<span style="color:#a31515;">"未成年人"</span>, 16, <span style="color:blue;">false</span>},
{<span style="color:#a31515;">"刚好成年"</span>, 18, <span style="color:blue;">true</span>},
}
<span style="color:blue;">for</span> _, tt := <span style="color:blue;">range</span> tests {
t.Run(tt.name, <span style="color:blue;">func</span>(t *testing.T) {
u := &User{Age: tt.age}
<span style="color:blue;">if</span> got := u.IsAdult(); got != tt.want {
t.Errorf(<span style="color:#a31515;">"IsAdult() = %v, want %v"</span>, got, tt.want)
}
})
}
}