扫码订阅《 》或入驻星球,即可阅读文章!

GOLANG ROADMAP

阅读模式

  • 沉浸
  • 自动
  • 日常
首页
Go友会
  • 城市
  • 校园
Go学院
  • Go小课
  • Go小考
  • Go实战
  • 精品课
Go求职
  • 求职辅导🔥
  • Offer收割社群
  • 企业题库
  • 面试宝典
Go宝典
  • 在线宝典
  • B站精选
  • 推荐图书
  • 每日博文
Go仓库
实验区
  • Go周边
  • Go下载
  • Go月刊
消息
更多
  • 用户中心

    • 我的信息
    • 推广返利
  • 玩转星球

    • 星球介绍
    • 角色体系
    • 星主权益
  • 支持与服务

    • 联系星主
    • 成长记录
    • 常见问题
    • 吐槽专区
  • 合作交流

    • 渠道合作
    • 课程入驻
    • 友情链接
author-avatar

GOLANG ROADMAP


首页
Go友会
  • 城市
  • 校园
Go学院
  • Go小课
  • Go小考
  • Go实战
  • 精品课
Go求职
  • 求职辅导🔥
  • Offer收割社群
  • 企业题库
  • 面试宝典
Go宝典
  • 在线宝典
  • B站精选
  • 推荐图书
  • 每日博文
Go仓库
实验区
  • Go周边
  • Go下载
  • Go月刊
消息
更多
  • 用户中心

    • 我的信息
    • 推广返利
  • 玩转星球

    • 星球介绍
    • 角色体系
    • 星主权益
  • 支持与服务

    • 联系星主
    • 成长记录
    • 常见问题
    • 吐槽专区
  • 合作交流

    • 渠道合作
    • 课程入驻
    • 友情链接
  • 宝典简介

    • 《Go语言标准库》The Golang Standard Library by Example
  • 第一章 输入输出 (Input/Output)

  • 第二章 文本

  • 第三章 数据结构与算法

  • 第四章 日期与时间

  • 第五章 数学计算

  • 第六章 文件系统

  • 第七章 数据持久存储与交换

  • 第八章 数据压缩与归档

  • 第九章 测试

    • 第九章 测试
    • testing - 单元测试
    • testing - 基准测试
    • testing - 子测试与子基准测试
    • testing - 运行并验证示例
    • testing - 其他功能
    • httptest - HTTP 测试辅助工具
    • 总结
  • 第十章 进程、线程与 goroutine

  • 第十三章 应用构建 与 debug

  • 第十五章 底层库介绍

  • 第十六章 同步

扫码订阅《 》或入驻星球,即可阅读文章!

testing - 运行并验证示例


polaris1119

# testing - 运行并验证示例

testing 包除了测试,还提供了运行并验证示例的功能。示例,一方面是文档的效果,是关于某个功能的使用例子;另一方面,可以被当做测试运行。

一个示例的例子如下:

func ExampleHello() {
	fmt.Println("Hello")
	// Output: Hello
}
1
2
3
4

如果 Output: Hello 改为:Output: hello,运行测试会失败,提示:

got:
Hello
want:
hello
1
2
3
4

一个示例函数以 Example 开头,如果示例函数包含以 "Output:" 开头的行注释,在运行测试时,go 会将示例函数的输出和 "Output:" 注释中的值做比较,就如上面的例子。

有时候,输出顺序可能不确定,比如循环输出 map 的值,那么可以使用 "Unordered output:" 开头的注释。

如果示例函数没有上述输出注释,该示例函数只会被编译而不会被运行。

# 命名约定

Go 语言通过大量的命名约定来简化工具的复杂度,规范代码的风格。对示例函数的命名有如下约定:

  • 包级别的示例函数,直接命名为 func Example() { ... }
  • 函数 F 的示例,命名为 func ExampleF() { ... }
  • 类型 T 的示例,命名为 func ExampleT() { ... }
  • 类型 T 上的 方法 M 的示例,命名为 func ExampleT_M() { ... }

有时,我们想要给 包 / 类型 / 函数 / 方法 提供多个示例,可以通过在示例函数名称后附加一个不同的后缀来实现,但这种后缀必须以小写字母开头,如:

func Example_suffix() { ... }
func ExampleF_suffix() { ... }
func ExampleT_suffix() { ... }
func ExampleT_M_suffix() { ... }
1
2
3
4

通常,示例代码会放在单独的示例文件中,命名为 example_test.go。可以查看 io 包中的 example_test.go 了解示例的编写。

# 实现原理

本节开头提到了示例的两个作用,它们分别是由 godoc 和 go test 这两个命令实现的。

在执行 go test 时,会运行示例。具体的实现原理,可以通过阅读 go test 命令源码和 testing 包中 example.go 文件了解。

  • 命名约定
  • 实现原理