Go mod 好菜系列 - 0x11 ginkgo/gomega 这口 BDD 测试风味更重

详细讲 ginkgo/gomega 和 testify 的风格差异、BDD 测试为什么有人喜欢、它更适合哪些场景,以及什么时候它会显得过重。

如果说 testify 是“把测试写得更顺手”,那 ginkgo/gomega 更像是在说:“不只是顺手,我们还想让测试更像一段行为描述。”这套风格有人特别喜欢,也有人觉得太花。两边都能理解,关键还是看团队和项目。

它和 testify 最核心的差异是什么

  • testify 更像标准库测试的增强工具
  • ginkgo/gomega 更像一套测试写作风格

也就是说,前者是在你现有测试结构上加顺手能力,后者则在更大程度上影响你“怎么组织测试描述”。

Ginkgo 的感觉

var _ = Describe("UserService", func() {
    Describe("CreateUser", func() {
        It("should create user when input is valid", func() {
            // test logic
        })
    })
})

这种写法明显比标准库测试更像自然语言结构。你读起来像在看:

  • 描述哪个模块
  • 描述哪个行为
  • 验证应该发生什么

Gomega 的断言风格

Expect(err).To(BeNil())
Expect(user.Name).To(Equal("Raymond"))

它的断言风格也比 testify 更“句子化”。你喜欢不喜欢这件事,非常看个人审美和团队习惯。

为什么有人很喜欢它

  • 层次感强
  • 复杂行为场景读起来更像说明文
  • 适合集成测试和行为驱动测试
  • 多人协作时,测试结构更容易按行为拆块

尤其是那种场景比较多、状态转换多、流程链路长的测试,用行为式结构确实会显得更清楚。

但它也真的会显重

如果你的项目测试目前还停留在:

  • 几个简单 service 函数
  • 一些边界值校验
  • 少量接口测试

那 ginkgo/gomega 有时候会显得像“为了组织测试而引入了更重的测试结构”。这不是它不好,而是工具和项目阶段不总是匹配。

它更适合什么

  • 复杂集成测试
  • 流程和状态驱动明显的测试
  • 团队明确喜欢 BDD 风格
  • 希望测试更像可读说明文

如果团队本来就更偏直接、务实、标准库派,那 testify 往往已经够了。

小结

ginkgo/gomega 不是“比 testify 更高级”,它更多只是另一种风格:

  • 更偏行为描述和结构化测试组织
  • 特别适合复杂流程型测试
  • 小项目或简单测试里容易显重
  • 选它更多是团队测试文化选择,不是单纯功能选择

下一篇我们讲 air。前面的菜都偏库,这道则偏开发体验工具:写服务时自动热重载,到底值不值。

Read more

Harness Engineering:从驾驭模型到构建 AI 工厂

Harness Engineering:从驾驭模型到构建 AI 工厂

2026 年,AI 编程工具的竞争焦点发生了根本性转变:决定 AI 助手好不好用的,不再是模型本身,而是包裹在模型外面的那层"Harness"。同一个模型,在不同的 Harness 下,性能差距可以达到 78% vs 42%。 这篇文章将带你深入了解 Harness Engineering——这个正在重新定义 AI 工程实践的新兴领域。 一、什么是 Harness Engineering? Harness 的字面意思是"马具/缰绳"——用来驾驭一匹强壮但不受控的马。在 AI 语境下,Harness 就是 LLM 之外的一切:工具定义、记忆系统、权限模型、反馈循环、文档规范、多

By Fuyu Jia

Claude Code CLI + Ralph:让 AI 自动完成大型编程任务的终极方案

TL;DR 当你的编程任务大到一个 AI 对话窗口装不下时,Ralph 会帮你把任务拆成小块,让 Claude Code CLI 一个接一个地自动完成——每轮都用全新的上下文窗口,不会越写越糊涂。 一、什么是 Ralph? Ralph 是一个开源项目(GitHub 16k+ Stars),基于 Geoffrey Huntley 提出的 "Ralph Pattern" 构建。它的核心理念很简单: 不要让 AI 在一个漫长的会话里做完所有事情,而是把大任务拆成小故事,每个故事用一个全新的 AI 实例来完成。 这解决了 AI 编程中最常见的痛点——上下文窗口耗尽。当对话越来越长,AI 的输出质量会明显下降。Ralph 通过「每轮一个新实例」的方式,

By Fuyu Jia