使用标准库测试 Go 代码 | Henrique Vicente

主要观点:

  • Go 标准测试包遵循直接明了的方式,没有像其他现代编程语言那样的断言函数,主要使用t.Errorft.Fatalf函数。
  • 认为使用断言库虽能减少写测试代码的工作量,但会带来一些问题,如增加测试的依赖和间接性,难以理解测试背后发生的事情等。
  • 比较了 Go 中不同的测试方式,如使用标准库测试和使用断言库(如 Testify)的差异,强调写符合 Go 习惯的代码能减少缺陷和维护时间。
  • 介绍了github.com/google/go-cmp包用于比较 Go 值的相等性,以及在比较复杂结构时的用法和注意事项。
  • 批判了 Ginkgo 的行为驱动开发(BDD)方式,认为其降低了生产力和可维护性。

关键信息:

  • Go 标准测试包中无断言函数,用t.Errorft.Fatalf
  • 断言库增加测试复杂性,易隐藏错误信息。
  • github.com/google/go-cmp用于比较结构值,可提供更清晰错误信息。
  • Ginkgo 的 BDD 方式降低生产力和可维护性。

重要细节:

  • t.Errorft.Fatalf借用fmt包格式输出。
  • assert.Equal虽节省代码但可能分散注意力。
  • t.FailNow会终止测试执行,Testify 的assertrequire有区别。
  • github.com/google/go-cmp在比较结构时的各种用法和注意点,如忽略字段等。
  • Ginkgo 测试方式在实际项目中表现不佳,速度慢且难维护。
阅读 32
0 条评论