Go测试中验证错误的四种方法:1. 检查error是否为nil;2. 用strings.Contains比对错误消息;3. 用errors.As进行自定义错误类型断言;4. 用errors.Is判断预定义错误变量。
在 Go 语言中,函数经常通过返回 error 类型来表示操作失败。测试这些错误返回值是确保程序健壮性的关键环节。我们不仅需要确认错误是否发生,还要验证错误的具体内容,比如错误类型或消息。下面介绍几种常用的 Golang 测试中验证错误的方法。
最简单的断言是判断返回的 error 是否为 nil,从而确认是否发生了错误。
func TestDivide_InvalidInput(t *testing.T) {
_, err := divide(10, 0)
if err == nil {
t.Fatal("expected an error, but got nil")
}
}
这种写法直接有效,适合只需要知道是否出错的场景。
有时我们需要验证错误的具体信息。可以通过 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)
}
}
注意:依赖错误字符串容易因文案变更导致测试失败,应谨慎使用。
若函数返回自定义错误类型,可用类型断言验证具体错误种类。
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),比直接类型断言更安全。
当函数返回预定义的错误变量时,可用 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.Is 和 errors.As 能让测试更稳定、可维护。不复杂但容易忽略的是提前设计好错误结构,而不是在测试里硬拆字符串。
# go
# golang
# app
# ai
# golang测试
# Error
# 字符串
# nil
# 自定义
# 比对
# 的是
# 是在
# 只需
# 适用于
# 而不
# 可以通过
# 测试中
# 能让
相关文章:
如何在云主机上快速搭建网站?
如何选择域名并搭建高效网站?
内网网站制作软件,内网的网站如何发布到外网?
C++中的Pimpl idiom是什么,有什么好处?(隐藏实现)
如何在IIS中新建站点并配置端口与IP地址?
较简单的网站制作软件有哪些,手机版网页制作用什么软件?
制作国外网站的软件,国外有哪些比较优质的网站推荐?
网站制作企业,网站的banner和导航栏是指什么?
制作网站的模板软件,网站怎么建设?
制作旅游网站html,怎样注册旅游网站?
如何选择服务器才能高效搭建专属网站?
建站主机如何安装配置?新手必看操作指南
建站之星安装提示数据库无法连接如何解决?
公司网站制作价格怎么算,公司办个官网需要多少钱?
深圳网站制作公司好吗,在深圳找工作哪个网站最好啊?
盘锦网站制作公司,盘锦大洼有多少5G网站?
黑客如何通过漏洞一步步攻陷网站服务器?
网站制作软件免费下载安装,有哪些免费下载的软件网站?
山东云建站价格为何差异显著?
电商网站制作多少钱一个,电子商务公司的网站制作费用计入什么科目?
如何用免费手机建站系统零基础打造专业网站?
建站之星安装失败:服务器环境不兼容?
创业网站制作流程,创业网站可靠吗?
交易网站制作流程,我想开通一个网站,注册一个交易网址,需要那些手续?
如何通过虚拟主机快速完成网站搭建?
宝塔面板如何快速创建新站点?
打鱼网站制作软件,波克捕鱼官方号怎么注册?
网站制作哪家好,cc、.co、.cm哪个域名更适合做网站?
如何获取上海专业网站定制建站电话?
合肥做个网站多少钱,合肥本地有没有比较靠谱的交友平台?
怎么制作网站设计模板图片,有电商商品详情页面的免费模板素材网站推荐吗?
黑客如何利用漏洞与弱口令入侵网站服务器?
高防服务器租用首荐平台,企业级优惠套餐快速部署
孙琪峥织梦建站教程如何优化数据库安全?
网页设计网站制作软件,microsoft office哪个可以创建网页?
建站主机选购指南与交易推荐:核心配置解析
可靠的网站设计制作软件,做网站设计需要什么样的电脑配置?
一键制作网站软件下载安装,一键自动采集网页文档制作步骤?
外汇网站制作流程,如何在工商银行网站上做外汇买卖?
建站主机与服务器功能差异如何区分?
宁波免费建站如何选择可靠模板与平台?
教学论文网站制作软件有哪些,写论文用什么软件
?
一键网站制作软件,义乌购一件代发流程?
武汉网站设计制作公司,武汉有哪些比较大的同城网站或论坛,就是里面都是武汉人的?
唐山网站制作公司有哪些,唐山找工作哪个网站最靠谱?
建站之星官网登录失败?如何快速解决?
实现虚拟支付需哪些建站技术支撑?
如何快速上传自定义模板至建站之星?
无锡制作网站公司有哪些,无锡优八网络科技有限公司介绍?
如何有效防御Web建站篡改攻击?
*请认真填写需求信息,我们会在24小时内与您取得联系。