如何在Golang中测试错误返回_Golang 错误返回测试实践

Go中通过errors.Is和errors.As实现安全的错误比较与类型提取;2. 针对自定义错误类型可验证结构字段;3. 利用接口模拟依赖错误以测试调用方逻辑,确保错误处理正确。

如何在golang中测试错误返回_golang 错误返回测试实践

在 Go 语言开发中,函数返回错误(error)是处理异常情况的标准方式。为了保证程序的健壮性,对错误路径进行充分测试至关重要。本文介绍如何在 Golang 中有效测试错误返回,确保你的代码在出错时依然表现正确。

理解 error 的本质

Go 中的 error 是一个接口类型:

type error interface {    Error() string}

这意味着你可以通过比较错误消息、使用自定义错误类型或调用特定方法来判断错误是否符合预期。

使用 errors.Is 和 errors.As 进行语义化比较

Go 1.13 引入了 errors.Iserrors.As,让错误判断更安全、更清晰。

立即学习“go语言免费学习笔记(深入)”;

假设你有一个函数可能返回预定义错误:

var ErrNotFound = errors.New("not found")func FindUser(id int) (*User, error) {    if id < 0 {        return nil, ErrNotFound    }    // ...}

对应的测试可以这样写:

func TestFindUser_ErrorWhenInvalidID(t *testing.T) {    _, err := FindUser(-1)    if !errors.Is(err, ErrNotFound) {        t.Fatalf("expected ErrNotFound, got %v", err)    }}

errors.Is 能正确处理封装过的错误(如使用 wrap),比直接比较更可靠。

闪念贝壳 闪念贝壳

闪念贝壳是一款AI 驱动的智能语音笔记,随时随地用语音记录你的每一个想法。

闪念贝壳 218 查看详情 闪念贝壳

测试自定义错误类型和结构信息

有些错误携带额外信息,比如 HTTP 状态码或字段名。这时可以用 errors.As 提取具体类型。

例如:

type ValidationError struct {    Field string}func (e *ValidationError) Error() string {    return fmt.Sprintf("invalid field: %s", e.Field)}func ValidateEmail(email string) error {    if email == "" {        return &ValidationError{Field: "email"}    }    return nil}

测试时提取错误类型并验证字段:

func TestValidateEmail_Empty_ReturnsValidationError(t *testing.T) {    err := ValidateEmail("")    var ve *ValidationError    if !errors.As(err, &ve) {        t.Fatal("expected ValidationError")    }    if ve.Field != "email" {        t.Errorf("expected field 'email', got %s", ve.Field)    }}

模拟错误以测试调用方逻辑

在单元测试中,常需模拟依赖返回错误。可以通过接口注入或函数变量实现。

例如,使用接口:

type DB interface {    GetUser(int) (*User, error)}func ServiceGetUser(db DB, id int) (*User, error) {    user, err := db.GetUser(id)    if err != nil {        return nil, fmt.Errorf("service error: %w", err)    }    return user, nil}

测试时传入模拟对象:

type MockDB struct {    err error}func (m *MockDB) GetUser(int) (*User, error) {    return nil, m.err}func TestServiceGetUser_DBError_ReturnsWrappedError(t *testing.T) {    mockDB := &MockDB{err: ErrNotFound}    _, err := ServiceGetUser(mockDB, 1)    if !errors.Is(err, ErrNotFound) {        t.Fatalf("expected wrapped ErrNotFound")    }}

基本上就这些。关键是用好标准库提供的工具,结合接口设计,让错误可测试、可追溯。

以上就是如何在Golang中测试错误返回_Golang 错误返回测试实践的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/980743.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月1日 20:48:59
下一篇 2025年12月1日 20:49:20

相关推荐

  • SEC在两个加密ETF(位于dogecoin ETF和灰度HBAR HBAR ETF)上推迟了其决定。

    美国证券交易委员会(sec)再次推迟了对两款加密货币etf的审批决定,分别是bitwise dogecoin etf和grayscale hedera(hbar)etf。 根据Blockavise周一发布的报告,美国证券交易委员会已经扩大了对这两种加密ETF的审查范围,其中一款面向Dogecoin,…

    2025年12月8日
    000
  • Cardano(ADA)正在进入下一章

    加强网络的此举将使平台变得更加可扩展,可用和安全。 输入输出(IO)将在Cardano的下一章中向后拉窗帘,揭示了新的路线图和新的防组织措施。 作为使Cardano更具可扩展,可用和安全的努力的一部分,IO强调了如何加强网络的共识。 磨削攻击是一种恶意活动的一种形式,在这种活动中,一个坏演员与区块链…

    2025年12月8日
    000
  • Fomo的潮汐浪潮正在击中模因硬币现场,而Little Pepe($ lilpepe)正在高高骑行

    dogecoin(doge)正面临9600万个代币解锁的问题,这使得交易者纷纷转向一种名为 $ lilpepe 的模因币,该币具备第二层区块链功能。 FOMO热潮正在席卷模因币市场,Little Pepe($ Lilpepe)迅速崛起,在预售开启仅一天内就筹集了20万美元。当Dogecoin遭遇大量…

    2025年12月8日
    000
  • 系绳扩大了黄金策略,并在Elemental Altus版税中股份

    tether investments近日大举购入elemental altus特许权使用费公司的股份,进一步推进其以黄金和硬资产为支撑的金融基础设施战略。 加密巨头Tether通过此次投资,增持了以黄金特许权使用费为主营业务的Elemental Altus公司(ELE -0.36%),继续扩展其在硬…

    2025年12月8日
    000
  • 阻滞剂:2025年最佳趋势加密货币

    在预售阶段成功募集2.98亿美元,售出224亿枚bdag代币,该项目甚至在正式上线前便已积累强劲势头。 2025年6月正逐渐升温,加密交易者纷纷加码投入,这不仅仅是口头说说而已。Layer 1与DeFi领域的竞争愈发激烈,但只有少数项目展现出真正的增长动力、优质吸引力以及爆发潜力。 其中,Block…

    2025年12月8日
    000
  • 代币循环的重大增加继续与市场绩效保持权衡

    以下是你提供内容的伪原创版本,已保持原意不变,并保留图片位置: 该报告研究了五个加密项目:Taiko、Pyth、Morpho、Nyan 和 Spec,结果表明更高的流通量并未带来更强的需求增长。 根据代币主义者(前身为 Tokenunlocks)发布的 30 天供应分析显示,多个项目的代币循环供应量…

    2025年12月8日
    000
  • Maple Finance与Lido Finance合作伙伴提供由Steth支持的Stablecoin信用额度

    此举使机构在无需解锁以太坊(eth)的情况下借入稳定币,从而在释放流动性的同时继续享有以太坊的质押收益。 Maple Finance正与Lido Finance合作,推出由stETH支持的稳定币授信服务。stETH是代表已质押以太坊的流动性质押代币。 这项合作将使机构能够在不卖出ETH的前提下获取稳…

    2025年12月8日
    000
  • Mercurity Fintech Holding Inc.(NASDAQ:MFH)引入了一项主要战略计划,以比特币为中心

    在一项引人注目的战略举措中,mercurity fintech holding inc.(nasdaq:mfh)正式推出了一项聚焦比特币的核心发展计划。该公司致力于基于区块链技术的金融服务和产品开发,并宣布将启动一项高达80亿美元的融资方案,旨在建立长期持有的比特币储备金库,并将数字资产纳入其资本架…

    2025年12月8日
    000
  • AI助理平台Angel Twin将于6月18日推出其公用事业令牌$ ANGL

    公用事业代币$ angl的母公司angl inc.宣布其代币生成活动定于2025年6月18日启动 英属维尔京群岛,2025年6月12日,链闻 公用事业代币$ ANGL的母公司Angl Inc.正式公布,其代币生成事件(TGE)将于2025年6月18日举行,并将在UNISWAP上提供初始流动性。作为核…

    2025年12月8日
    000
  • 伊恩·莱尔(Ian Lyall)

    经验丰富的记者兼编辑伊恩·莱尔(ian lyall)在加入名为“积极主动”的执行编辑岗位时,带来了超过三十年的深厚行业积淀。 输出:一位英国媒体人近日就新闻机构采用人工智能撰写稿件的现象发表了看法。 他在提及自己所服务的这家专注于金融领域的新闻平台时表示,这里聚集了一批拥有丰富经验和专业素养的资深记…

    2025年12月8日
    000
  • CPSC召回的Sizhinai LED LED TUTU裙子由于电池摄入危险

    华盛顿特区 – 美国消费品安全委员会(CPSC)呼吁消费者立即停止使用Sizhinai品牌的LED Tutu连衣裙。 ![](data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wCEAAkGBwgHBgkIBwgKCgkLDRYPDQ…

    2025年12月8日
    000
  • 比特币(BTC)的价格记录约1.85%

    比特币价格在过去24小时内下跌约1.85%,加密货币市场再次出现看跌情绪。 受美国生产者价格指数(PPI)超出预期的影响,加密货币市场整体走低。过去一天内,这一数据使比特币价格下跌了约1.85%。 目前,比特币的交易价格为107,249.8美元,交易量达到52034亿美元。 同时,山寨币市场也跟随比…

    2025年12月8日
    000
  • Tether Investments收购了Elemental Altus特许权使用费公司的大量股份。

    tether investments sa de cv(“tether investments”)作为tether group的附属机构,近日宣布已购入elemental altus royalties corp.的大笔股权。 隶属于Tether集团的Tether Investments Sa de…

    2025年12月8日
    000
  • 日本时装公司ANAP购买50.5个比特币,计划多购买950

    日本时装品牌anap宣布购入50.5枚比特币 近日,日本知名服饰企业ANAP正式披露已买入50.5枚BTC,并计划在未来两个月内将其加密资产配置提升至950枚。 * 此举凸显日本在加密货币监管领域的持续领先地位,相较于亚洲多数尚未明确监管路径的国家,日本早已构建起清晰的合规框架。 * 自2017年起…

    2025年12月8日
    000
  • 20021财年经审计的财务报告

    以下是对您提供内容的伪原创版本,已保留原始图片位置且未改变文章大意: 该报告分析了与区块链及数字资产相关的发展动态。 Web3领域的领先企业Animoca Brands Corporation正在快速扩大其业务规模,并在迪拜设立了新办公室,将其打造为中东地区的运营中心。 该公司专注于区块链、Web3…

    2025年12月8日
    000
  • shiba inu(shib):在看涨信号中关注$ 0.000030

    shiba inu透露,shiba inu多头的目标为$0.000030,这一水平可能成为推动新一轮上涨的关键触发点。 随着投资者持续关注加密市场的主流资产,Shiba INU价格开始显现出反弹的信号。 在周线图上形成上升趋势后,SHIB正准备重新测试$0.00002的FIB支撑位。若市场动能保持强…

    2025年12月8日
    000
  • HTX巩固了作为顶级交流的位置,并排名升高

    这一上升趋势同样体现在其他权威加密数据平台上。htx在coingecko上的排名由第13位跃升至第7位。 梅注意到,HTX作为一家领先的加密货币交易所,持续在全球排名中攀升,在Coingecko上位列第七,在CoinMarketCap上排名第9,同时在Defillama(以北美为中心)和Crypto…

    2025年12月8日
    000
  • 加密事件日历:为什么重要以及在哪里找到一个

    加密市场是一个永不停歇的领域,从新代币发行、协议更新到空投、代币解锁、硬分叉以及宏观经济公告,各类事件层出不穷。 加密世界充满了连续不断的动态事件,包括新代币发布、协议升级、空投活动、代币解锁、硬分叉,以及影响资产价格的重大宏观经济消息。如果你忽视了这些关键节点,就可能错失盈利机会。 因为在加密行业…

    2025年12月8日
    000
  • 由于Nexchain在其第18阶段预售中筹集了420万美元

    正如加密市场所展现的复苏迹象,两个突出项目正吸引投资者的目光。 两个加密项目正处于各自的发展浪潮中。Injective(ING)在当前市场环境中展现出强劲表现,而Nexchain则迅速推进其预售阶段。 随着比特币价格今日显示出增强的势头,整个加密货币市场也随之活跃,这些项目持续引发关注。 两者在其各…

    2025年12月8日
    000
  • Luno通过HEDERA(HBAR)和图(GRT)的列表扩展了马来西亚的加密货币产品

    八打灵再也:马来西亚证券监督委员会(sc)在2025年的第二批审核中,再次批准了luno平台上的两项数字资产。 根据官方公告,Luno所提交的Hedera(HBAR)与Graph(GRT)已获得批准,使该平台在马来西亚提供的加密货币总数增至22种,继续保持市场领先地位。 Luno马来西亚分公司负责人…

    2025年12月8日
    000

发表回复

登录后才能评论
关注微信