Go 中无内置 assert,但可用 testify/assert 简化测试:安装导入后,用 assert.Equal、assert.True 等一行断言,失败不中断;require 用于前置条件立即终止;支持自定义错误消息。

在 Go 中没有内置的 assert 语法,但通过第三方库(如 testify/assert)可以大幅简化测试断言逻辑,让错误信息更清晰、代码更简洁。
安装并导入 testify/assert
使用 go get 安装主流断言库:
- go get github.com/stretchr/testify/assert
在测试文件中导入:
import "github.com/stretchr/testify/assert"
基础断言用法(替代 if + t.Error)
传统写法需手动检查 + 报错,易冗长;assert 将判断和报错封装成一行:
立即学习“go语言免费学习笔记(深入)”;
- assert.Equal(t, expected, actual) —— 检查相等(支持结构体、切片、map 等)
- assert.True(t, condition) —— 检查布尔值为 true
- assert.Nil(t, err) —— 检查错误是否为 nil
- assert.Contains(t, str, "substring") —— 检查字符串/切片是否包含某值
失败时自动打印预期值、实际值和调用位置,无需额外格式化。
处理失败时不中断执行(assert vs require)
assert 失败后继续运行后续断言,适合一次性验证多个属性;require(同库提供)失败则立即 return,适合前置条件检查:
- 用 require.NoError(t, err) 确保函数成功执行后再测返回值
- 用 assert.Equal(t, 100, len(items)) 即使失败也继续校验 items 是否有序
自定义错误消息与上下文
所有 assert 函数最后可加格式化参数,便于定位问题:
- assert.Equal(t, 42, result, "user ID calculation failed for input %v", input)
- 消息会追加在默认错误后,不影响原始对比逻辑
避免拼接字符串构造错误信息,保持断言语义清晰。










