type
status
date
slug
summary
tags
category
icon
password
AI summary

Go语言基础之单元测试

什么是单元测试

单元测试(Unit Testing)是指对一段独立且可重复的代码块进行测试,通常是针对函数、模块或类。Go 语言提供了强大的单元测试支持和工具,能帮助工程师进行高效、充分的测试工作。

测试文件规则

  1. 文件名:测试文件的名称必须以 _test.go 结尾。
  1. 函数名:测试函数必须以 Test 为前缀,并且描述测试的功能。
  1. 包含:应包含包向 testing

一个基础测试示例

代码文件

假设我们有一个计算函数文件为 math.go

测试文件

math.go 添加测试,创建文件 math_test.go

运行单元测试

使用以下命令运行单元测试:
如果想要看到输出详情,可以使用 -v 参数:

测试要点

  1. 根据情况实现表观验证:每个测试应根据情况写明確验证值。
  1. 添加多种输入:确保函数在不同输入情况下也能正常运行。
  1. 尽量测试过程选择情况:如何处理空数据、异常情况。

为测试添加设计信息

可以使用 t.Logt.Logf 进行设计信息输出:

高级单元测试技巧

1. 子测试(Subtests)

Go 测试框架支持子测试,用于对函数的不同场景进行分组测试。

测试覆盖率

测试覆盖率用于衡量测试对代码的覆盖情况。

查看覆盖率命令


Mock 测试

在复杂的应用程序中,通常需要测试依赖于外部服务的代码,这时可以通过Mock来模拟依赖。

示例


常见问题与注意事项

  1. 测试代码的独立性:每个测试用例应独立运行,避免互相依赖。
  1. 边界条件:测试极端情况,如空输入、负数等。
  1. 随机性问题:避免在测试中使用随机值,确保结果可重复。
  1. 长时间运行的测试:使用 t.Skip 跳过长时间测试,或使用 timeout 参数设置测试时间。

练习题

  1. 编写一个 Divide(a, b int) 函数,计算两个整数相除的结果,并编写测试用例,考虑边界情况(如 b=0)。
  1. 实现一个 UserService,包含用户的创建和查询功能,并为其编写单元测试。
  1. 使用子测试编写一组测试,验证一个函数的输入输出行为。
 
fmtJSON