返回介绍

上卷 程序设计

中卷 标准库

下卷 运行时

源码剖析

附录

12.1.4 其他

发布于 2024-10-12 19:15:50 字数 1143 浏览 0 评论 0 收藏 0

单元测试相关技巧及工具收集。

示例

示例代码最大用途不是测试,而是导入到 GoDoc 等工具生成的帮助文档。
比对输出( stdout )结果和内部 output 注释是否一致来判断是否成功。

  • 不能使用内置函数 print/println ,因为它们输出到 stderr
  • 没有输出注释的示例被编译,但不执行。
func ExampleAdd() {
    fmt.Println(add(1, 2))
    fmt.Println(add(2, 2))
    
    // Output:
    // 3
    // 4
}
$ go test -v -run "Example"

=== RUN   ExampleAdd
--- PASS: ExampleAdd (0.00s)

PASS
ok      test/mylib      0.005s

失败,输出如下信息。

$ go test -v -run "Example"

=== RUN   ExampleAdd
--- FAIL: ExampleAdd (0.00s)
got:
3
4
want:
5
4

FAIL
FAIL    test/mylib      0.003s

支持无序匹配。

func ExampleAdd() {
	fmt.Println(add(1, 2))
	fmt.Println(add(2, 2))

	// Unordered output:
	// 4
	// 3
}

入口

像 main.main 那样,为测试提供一个入口函数。

  • 同样放在 _test.go 文件内。
  • 为整个测试过程提供 setup/teardown 机制。
  • 在 main goroutine 中执行。
func TestMain(m *testing.M) {
    
    // setup
    code := m.Run()			// 调用测试函数。
    // teardown
    
    os.Exit(code)			// 注意:os.Exit 不会执行 defer。
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文