如何使用Golang测试验证错误返回值_Golang错误断言与验证方法


Go测试中验证错误的四种方法:1. 检查error是否为nil;2. 用strings.Contains比对错误消息;3. 用errors.As进行自定义错误类型断言;4. 用errors.Is判断预定义错误变量。

如何使用golang测试验证错误返回值_golang错误断言与验证方法

在 Go 语言中,函数经常通过返回 error 类型来表示操作失败。测试这些错误返回值是确保程序健壮性的关键环节。我们不仅需要确认错误是否发生,还要验证错误的具体内容,比如错误类型或消息。下面介绍几种常用的 Golang 测试中验证错误的方法。

1. 基本错误存在性检查

最简单的断言是判断返回的 error 是否为 nil,从而确认是否发生了错误。

func TestDivide_InvalidInput(t *testing.T) {
    _, err := divide(10, 0)
    if err == nil {
        t.Fatal("expected an error, but got nil")
    }
}

这种写法直接有效,适合只需要知道是否出错的场景。

2. 错误消息比对

有时我们需要验证错误的具体信息。可以通过 errors.Is 或直接比较错误字符串实现。

func TestOpenFile_FileNotFound(t *testing.T) {
    _, err := os.Open("nonexistent.txt")
    if err != nil && !strings.Contains(err.Error(), "no such file") {
        t.Errorf("unexpected error message: %v", err)
    }
}

注意:依赖错误字符串容易因文案变更导致测试失败,应谨慎使用。

3. 自定义错误类型与类型断言

若函数返回自定义错误类型,可用类型断言验证具体错误种类。

代码小浣熊 代码小浣熊

代码小浣熊是基于商汤大语言模型的软件智能研发助手,覆盖软件需求分析、架构设计、代码编写、软件测试等环节

代码小浣熊 429 查看详情 代码小浣熊
type MyError struct {
    Msg string
}

func (e *MyError) Error() string {
    return e.Msg
}

func TestProcessData_CustomError(t *testing.T) {
    _, err := processData(-1)
    var myErr *MyError
    if !errors.As(err, &myErr) {
        t.Fatal("expected *MyError, got something else")
    }
    if myErr.Msg != "invalid input" {
        t.Errorf("wrong error message: %s", myErr.Msg)
    }
}

errors.As 是推荐方式,它能正确处理嵌套错误(wrapped errors),比直接类型断言更安全。

4. 使用 errors.Is 判断特定错误值

当函数返回预定义的错误变量时,可用 errors.Is 进行等值判断。

var ErrInvalidID = errors.New("invalid user ID")

func validateID(id int) error {
    if id <= 0 {
        return ErrInvalidID
    }
    return nil
}

func TestValidateID_Invalid(t *testing.T) {
    err := validateID(-5)
    if !errors.Is(err, ErrInvalidID) {
        t.Fatal("expected ErrInvalidID")
    }
}

这种方式清晰、安全,尤其适用于导出的公共错误类型。

基本上就这些常用方法。选择哪种取决于你的错误设计:用标准错误、自定义类型,还是包装错误。合理使用 errors.Iserrors.As 能让测试更稳定、可维护。不复杂但容易忽略的是提前设计好错误结构,而不是在测试里硬拆字符串。

以上就是如何使用Golang测试验证错误返回值_Golang错误断言与验证方法的详细内容,更多请关注其它相关文章!


# golang  # go  # 如何使用  # 小浣熊  # 返回值  # 自定义  # golang测试  # ai  # app  # 茶叶的营销推广方案策划  # 排名seo立的火星  # 龙江seo优化学习  # 青岛建设网站哪个最好  # 网站建设推广公司  # 推广网站建设如何选号  # 义马网站建设排名  # 忻州网站建设和优化  # 网站优化规范要求  # seo快刷  # 只需  # 如何在  # 是在  # 的是  # 比对  # 布尔 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894


相关推荐: 电脑没有声音了怎么办 电脑声音问题的全面排查与修复指南【详解】  《图怪兽》退出登录方法  RxJS中如何高效地在一个函数内处理和合并多个数据集合  腾讯QQ邮箱官方入口 QQ邮箱网页版登录平台  163邮箱登录入口官网 163.com邮箱登录入口  如何自定义苹果手机铃声  感染了幽门螺杆菌一定会导致胃癌吗?蚂蚁庄园今日答案最新11.30  创建快捷方式启动系统保护  抖音团长模式怎么做?团长模式是什么意思?  《书耽》更换手机号方法  苹果17 Pro如何启用分屏浏览_iPhone 17 Pro分屏浏览设置步骤  Excel如何快速合并单元格内容_Excel文本合并与函数操作技巧  《广发易淘金》国债逆回购操作教程  b站怎么用微信登录_b站微信登录方法  向往的生活小游戏启动处_向往的生活小游戏立即启动  偃武诸葛亮阵容搭配推荐  如何修改Windows截图的默认保存位置_告别C盘让桌面更整洁【教程】  《地下城堡4:骑士与破碎编年史》墓穴挑战125攻略  《下一站江湖2》独孤剑诀习得方法  铁路12306官网入口 铁路12306中国铁路官网登录首页  《王者荣耀世界》英雄获取攻略  苹果手机手电筒无法开启  todesk如何添加信任设备_todesk信任设备设置教程  背部总是隐隐作痛怎么回事 背痛如何改善  Win11如何分屏操作_Win11多窗口分屏技巧  cad怎么隐藏指定的图层_cad隐藏或冻结图层方法  《下一站江湖2》心法融合技巧  Python高效统计字典嵌套列表值在目标列表中的出现次数  sublime如何自定义文件类型图标_AFileIcon插件的主题切换与个性化配置  路由器DNS怎么设置最快 优化DNS提升上网速度教程  php如何实现多域名共享session_php存储session到redis与跨域读取配置  Go语言中方法与接收器:指针和值类型的调用机制详解  Linux如何优化系统启动流程_Linux启动项优化方案  SQL聚合查询、联接与筛选:GROUP BY 子句的正确使用与常见陷阱  《i莞家》修改昵称方法  苹果电脑如何快速截图并编辑 苹果电脑截屏标注快捷操作  Python中处理嵌套字典与列表的数据提取与过滤教程  漫蛙app官方版手机正版入口-漫蛙漫画manwa在线漫画正版入口  智慧团建活动报名入口 智慧团建活动报名入口手机端官网​  edge浏览器怎么修改语言为中文_Edge界面语言切换教程  Dagster资产间数据传递与用户配置管理教程  iPhone 13 Pro Max如何设置桌面小组件_iPhone 13 Pro Max小组件添加指南  LINUX怎么查看显卡信息_LINUX查看GPU状态  德邦快递查询入口登录官网 德邦快递单号查询系统入口  mail.qq.com登录入口 QQ邮箱网页版直达  Fedora怎么安装 Fedora Workstation安装步骤  极兔快递官网查询入口手机版 手机极兔快递登录查询入口官方  纯CSS实现自适应宽度与响应式布局的水平按钮组  《万兴喵影》导出视频方法  利用Flexbox实现图片元素的二维布局:2x2网格排列指南 

 2025-12-18

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.