自然语言风格的 Go 断言库 go-assert
go-assert 是一个简洁、高效且可读性极强的 Go 单元测试断言库,旨在帮助开发者编写更健壮、自然流畅的测试代码。
✨ 特性亮点
-
💬 自然语言风格:
That(got).Equal(expect)
更易读、更易懂 -
🔄 明确参数语义:清晰区分
got
与expect
,不再弄反顺序 -
⚡ 高性能实现:泛型支持,避免过度反射带来的性能损耗
-
✅ 丰富断言能力:涵盖常用断言类型,满足大多数测试场景
📦 安装方式
go get github.com/lvan100/go-assert
🤔 为什么选择 go-assert?
在使用传统断言库(如 testify
)时,我们常常会困惑哪个是实际值(got),哪个是期望值(expect)。
go-assert 通过自然语言风格的 API 设计消除了这种困扰,让测试代码更易于理解和维护。
此外,它还借鉴了多个优秀库的优点,并以更现代的方式实现,比如泛型支持、低反射开销等。
🧪 快速上手
✅ 简洁断言(函数式)
适用于简单值判断:
assert.True(t, isValid, "should be true")
assert.False(t, isClosed)
assert.Nil(t, result)
assert.NotNil(t, user, "user should not be nil")
assert.Panic(t, func () { panic("oops") }, "oops")
🔗 链式断言(更语义化)
That:适用于任意值
assert.That(t, got).Equal(expect)
assert.That(t, got).NotEqual(expect)
assert.That(t, got).Same(expect) // 同一实例
assert.That(t, got).NotSame(expect)
assert.That(t, got).TypeOf(MyStruct{})
assert.That(t, got).Implements((*io.Reader)(nil))
assert.That(t, got).Has(field)
assert.That(t, got).Contains(item)
assert.That(t, got).InSlice(slice)
assert.That(t, got).NotInSlice(slice)
assert.That(t, got).InMapKeys(mapVar)
assert.That(t, got).InMapValues(mapVar)
ThatError:专为 error
设计
assert.ThatError(t, err).Matches("timeout")
ThatString:字符串专用断言器
assert.ThatString(t, got).Equal("hello")
assert.ThatString(t, got).NotEqual("bye")
assert.ThatString(t, got).JsonEqual(`{"a":1}`)
assert.ThatString(t, got).Matches("^he.*")
assert.ThatString(t, got).EqualFold("Hello")
assert.ThatString(t, got).HasPrefix("he")
assert.ThatString(t, got).HasSuffix("lo")
assert.ThatString(t, got).Contains("ell")
💡 设计理念
-
🧠 语义明确:
got
和expect
顺序固定,减少思考负担 -
🧩 断言器分工清晰:
That
/ThatError
/ThatString
分别适用于通用值、错误、字符串 -
🛡️ 泛型保障类型安全:提升 IDE 支持和运行稳定性
-
🧰 丰富断言方法:满足从基本值到复杂结构的各种需求
✅ 示例测试
func TestLogin(t *testing.T) {
user, err := Login("admin", "1234")
assert.ThatError(t, err).Matches("invalid password")
assert.That(t, user).NotNil("user should not be nil")
assert.ThatString(t, user.Name).HasPrefix("admin")
}
📜 License
MIT License —— 免费使用,欢迎贡献!
🚀 让测试更自然、更清晰、更强大 —— 快使用 go-assert
吧!

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
GCC 15.1 发布,包含 COBOL 编译器及多项其他改进
GCC 15.1 现已发布,这是GCC 15 的首个稳定版本。新版本带来了 COBOL 编译器前端、多项 C 和 C++ 语言支持改进、对新 CPU 和 ISA 功能的支持、更强大的 Rust 编程语言支持、调试增强功能等等。 具体来说,GCC 15.1 提供了 COBOL 语言前端、各种可用性增强功能、针对 gccrs 的多项 Rust 编程语言改进、将其默认 C 语言版本升级至 C23、针对 AMD Zen 5 “znver5” target 的改进以及其他新的 AMD Zen target 优化、针对 Intel Xeon 7 Diamond Rapids targeting 的改进、为新的 512 位版本提供 Intel AVX10.2 支持、更多 Intel 高级性能扩展 “APX” 支持、移除 Xeon Phi 支持、OpenMP offloading功能增强,以及从硬件支持到语言特性的许多其他更改。 AMD 图形处理器的 AMDGPU 后端现在也支持标准 C++ 库 (libstdc++),实验性地支持通用设备,并已停用 Fiji GPU 支持。同样,搭载 GCC15 的...
- 下一篇
手把手教学!用且慢 MCP 手搓你的专属金融 AI 智能体
AI变革的浪潮汹涌而至!当下 MCP协议(全称:模型上下文协议)正在席卷全球,这一浪潮必将彻底改变AI大模型的应用方式。不仅Open AI、谷歌、微软等科技巨头都在加速布局MCP生态,而且阿里云、腾讯云、百度等国内大厂也纷纷入局。MCP的核心价值在于统一标准,它给AI大模型应用搭建了一套标准的“接口”和“工具箱”,可以让不同的“工具”能够更高效、更便捷地与大模型协同工作。 就在这个关键时刻,盈米基金再次走在了行业前沿! 盈米基金在4月8日重磅推出了业界首个聚焦金融、财富管理领域的盈米且慢MCP Server(以下简称:且慢MCP),并开放试用服务,获得了超过100名机构用户及个人用户的积极响应。 经过两周的用户体验反馈与工具打磨,且慢MCP在4月25日上线「正式版AI金融工具包」,提供首批29个专业金融工具(后续还将持续推出更多实用工具),并在阿里云百炼平台进行同步首发。作为平台的首个金融服务MCP,该服务开放给所有机构和用户免费调用,助力行业伙伴和投资者更高效搭建自己的金融服务智能体。 图|且慢MCP在阿里云百炼平台上线 在使用金融大模型的应用中有哪些痛点? 目前我们在使用金融大...
相关文章
文章评论
共有0条评论来说两句吧...