主要观点:Go 自带测试框架testing
包,通常在numbers_test.go
中测试numbers
包中的函数,如addNumbers
函数。但作者不喜欢这种方式,介绍了更有效的测试技巧和库。
关键信息:
- 常用测试命令
go test -cover -shuffle=on -race -vet=all -failfast <$RELEVANT_PACKAGE(S)>
及各参数含义。 - 表驱动测试在简单函数中可用,但复杂函数会使可读性变差,如 Goland 生成的测试函数。
- Go 测试可并行运行,默认开启,可通过
-parallel=1
禁用,应尽量并行测试以排查并发问题。 - 子测试可用于特定情况,命名规则为大
T
用于顶级测试,小t
用于子测试,.Parallel()
需在两者中都调用。 - 社区库如
brianvoe/gofakeit
用于生成假值,testify
库的(assert|require|mock)
功能方便测试,mock.Mock
在确定返回值时易出错但总体不错,testify/suite
不太推荐。 testcontainers
可用于创建临时容器进行测试,但可能出错,通常不写子测试。- 针对 Go 标准库函数的错误测试,如 JSON 编码和 URL 解析,通过特定方式可强制产生错误。
重要细节: - 测试函数结构及运行结果输出,如通过
go test
运行测试及不同情况下的输出。 - 各测试库和技巧的具体使用示例,如
buildFakeUser
函数、assert.Equal
等在测试中的应用。 testcontainers
的使用流程,包括创建数据库客户端和创建测试数据等。- 强制产生 URL 解析错误的特定输入。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。