前言:今天的内容就是实践与测试了
话不多说,切入主题:
go是一种开源的静态类型编程语言,具有简洁、高效、并发安全等特点,适用于构建可靠和高性能的软件应用。在Go中,测试是一项重要的实践,它有助于确保代码的正确性和可靠性。Go语言内置了一个轻量级的测试框架,称为"testing",可以用于编写和运行单元测试、性能测试和示例代码。
package main
import "testing"
// 要测试的函数
func Add(a, b int) int {
return a + b
}
// 单元测试
func TestAdd(t *testing.T) {
result := Add(2, 3)
expected := 5
if result != expected {
t.Errorf("Add(2, 3) = %d; expected %d", result, expected)
}
}
func main() {
// 运行单元测试
testing.Main(func(_, _ string) (bool, error) { return true, nil }, nil, nil, nil)
}
我们定义了一个名为Add的函数,用于计算两个整数的和。然后,我们编写了一个名为TestAdd的单元测试函数,对Add函数进行测试。在测试函数中,我们调用Add函数并检查结果是否与预期相符,如果不相符,则使用t.Errorf函数报告错误。最后,我们通过调用testing.Main函数来运行单元测试。
在命令行中执行go test命令,Go会自动识别并执行测试代码。测试框架会输出测试结果,并提供详细的错误信息和覆盖率报告。
运行截图:
ps: 这里要记得,你的文件名必须以
_test.go 结尾才会识别并且执行测试(go语言规定的)
比如说,作者就在这犯了这个错误,所以
既然说到这里了,那么就继续把这些总结下:
-
测试文件命名和组织:
- 测试文件的命名应该与要测试的源代码文件相关,并以
_test.go结尾。例如,对于example.go文件,相应的测试文件应命名为example_test.go。 - 在测试文件中,你可以创建一个或多个以
Test开头的测试函数,这些函数将被测试框架自动识别和运行。
- 测试文件的命名应该与要测试的源代码文件相关,并以
-
编写测试函数:
- 测试函数的签名应为
func TestXxx(*testing.T),其中Xxx是你要测试的函数名。 - 使用
t.Error或t.Fatal方法来报告测试失败。t.Error用于标记测试失败但继续执行,而t.Fatal用于标记测试失败并停止执行。 - 使用
t.Logf方法来记录额外的日志信息,以帮助你理解测试的执行过程。
- 测试函数的签名应为
-
使用断言:
- Go语言中常用的断言库是
testing包提供的断言方法,如t.Errorf、t.Fatalf、t.Log等。这些方法可以帮助你编写更丰富和准确的测试断言。 - 另外,还可以使用第三方的断言库,如
github.com/stretchr/testify/assert。这些库提供了更丰富的断言函数,可以简化测试代码的编写。
- Go语言中常用的断言库是
-
表格驱动测试:
- Go语言鼓励使用表格驱动测试的方式来组织测试用例。通过使用结构体切片或二维数组,你可以方便地组织多个输入和预期输出的测试数据,并使用循环来遍历执行测试。
-
运行测试:
-
在项目根目录下,可以使用以下命令运行测试:
go test
- 运行测试时,测试框架会自动寻找并执行所有以`Test`开头的测试函数。- 你还可以使用
go test -run <pattern>来运行特定的测试函数,其中<pattern>可以是部分或完整的测试函数名。
-
-
测试覆盖率:
- Go测试工具还提供了测试覆盖率分析功能。你可以使用以下命令运行测试并生成测试覆盖率报告:
go test -cover
这将显示测试覆盖率的百分比,并高亮显示未被覆盖到的代码行。