主要观点: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) `代码` - 列表 > 引用。你还可以使用@来通知其他用户。