我如何在 Go 中编写测试

主要观点: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 解析错误的特定输入。
阅读 22
0 条评论