Go语言中如何进行测试
程序员文章站
2022-04-10 17:03:23
...
主要讲解在Go语言中如何进行代码测试
1、调试和测试
在程序开发中应该更多的注重测试而不是调试,即测试的优先级重于调试
2、传统测试与表格驱动测试
传统测试在大多数情况下使用代码进行的单元测试,示例代码如下:
传统测试的缺点:
- 测试数据与测试逻辑耦合在一起
- 出错信息不准确
- 一旦一个数据出错测试全部结束
表格驱动测试 就是在传统测试的基础上 对测试数据与测试逻辑相分离,数据像表格一样单独存储,示例如下:
在Go语言中一般采用表格驱动测试,其优点主要有:
- 分离测试数据与测试逻辑
- 拥有明确的错误信息
- 可以部分失败
- Go语言的语法使我们更容易实现表格驱动测试
3、在Go语言中实现表格驱动测试
注意事项:测试Go文件命名为:xxx_test.go,在测试Go文件中,测试方法使用大写Test开头,测试方法传入参数为:*testing.T
现在示例对勾股数方法进行表格驱动的单元测试 以及性能测试 ,代码如下:
package main
import (
"testing"
"math"
)
//传入两个 int 类型数据 a、b,返回 返回 a²+b²
func Triangle(a, b int) int {
var c int
c = int(math.Sqrt(float64(a*a + b*b)))
return c
}
//定义测试方法对上面的 方法进行测试
func TestTriangle(t *testing.T) {
tests := []struct{ a, b, c int }{
{3, 4, 5},
{5, 12, 13},
{8, 15, 17},
{12, 35, 36},
{30000, 40000, 5000},
}
for _, tt := range tests {
if actual := Triangle(tt.a, tt.b); actual != tt.c {
t.Errorf("Triangle(%d, %d); 实际结果: %d; 期望结果: %d",tt.a, tt.b, actual, tt.c)
}
}
//输出结果:
//=== RUN TestTriangle
//--- FAIL: TestTriangle (0.00s)
// 21_Test1_test.go:25: Triangle(12, 35); 实际结果: 37; 期望结果: 36
// 21_Test1_test.go:25: Triangle(30000, 40000); 实际结果: 50000; 期望结果: 5000
//FAIL
}
//对方法进行性能测试
func BenchmarkTriangle(b *testing.B) {
for i:=0;i<b.N;i++ {
if actual := Triangle(3,4); actual != 5 {
b.Errorf("Triangle(%d, %d); 实际结果: %d; 期望结果: %d",3, 4, actual, 5)
}
}
//输出结果(在短时间内执行了 2000000000 次 测试,每次耗时 0.42 ns):
//goos: windows
//goarch: amd64
//2000000000 0.42 ns/op
//PASS
}
Goland 编译器会 自动识别到 TestTriangle、BenchmarkTriangle 方法为测试方法,可以使其直接执行,针对性能测试,我们可以使用Go提供的 Go tool 工具查看是什么操作占用了过多性能。
转载于:https://my.oschina.net/ruoli/blog/1816384
上一篇: 用QT实现简单的下雪效果
下一篇: 伪静态的实现,伪静态实现_PHP教程