Golang Go语言中 test 常见套路(1)

Golang Go语言中 test 常见套路(1)

本文主要聊下 go 测试的常见套路,测试是开发过程中比较重要的一环节,特别是在 github 上撸代码,这是既要当开发,又要当测试。下面介绍常见套路让测试变的轻松点(最下面有本人 github 地址,感兴趣可一看)。

go test 函数

测试函数以 Test 开头,go test 就可以执行, 函数形参使用 testing.T 的指针

func TestJoin(t *testing.T) {
	urls := []string{
		"http://127.0.0.1:43471/v1",
	}
want := []string{
	"http://127.0.0.1:43471/v1",
}

if joinPaths("", urls[0]) != want[0] {
	t.Errorf("got %s want %s\n", joinPaths("", urls[0]), want[0])
}

}

go 性能测试

导入 testing 包,指定 B 对象,就可以编写性能测试代码,性能测试代码以 Benchmark 开头这是和标准库的约定, 在常见的 go test 选项后面跟一个-bench 选项当然-benchmem 可以显示内存占用,下面的代码主要考量 bytes.Buffer 和 strings.Builder 的性能区别

func Benchmark_BytesWriteMem(b *testing.B) {
	var buf bytes.Buffer
for i := 0; i < b.N; i++ {
	buf.WriteString("hello")
	buf.String()
}

}

func Benchmark_builderMem(b *testing.B) { var s strings.Builder

for i := 0; i < b.N; i++ {
	s.WriteString("hello")
	s.String()
}

}

  • 输出
env GOPATH=`pwd` go test -bench "Benchmark_builderMem" -benchmem  -v .
goos: linux
goarch: amd64
pkg: github.com/guonaihong/test/string
Benchmark_builderMem-4   	200000000	         9.54 ns/op	      30 B/op	       0 allocs/op
PASS
ok  	github.com/guonaihong/test/string	2.831s

env GOPATH=pwd go test -bench “Benchmark_BytesWriteMem” -benchmem -v . goos: linux goarch: amd64 pkg: github.com/guonaihong/test/string Benchmark_BytesWriteMem-4 500000 104201 ns/op 1254075 B/op 1 allocs/op PASS ok github.com/guonaihong/test/string 52.153s

只测试某个函数

go test 默认会把包下面的所有测试函数都跑一遍,如果从满屏幕测试函数里面找一个错误的日志很费力。 这时候需要只测试某个函数,可以使用-test.run 函数名的方式,该选项是支持正则表达式的。

go test -test.run=^TestHello ./...

查看测试代码覆盖度

如果 go 里面可以细化到哪些代码被测试过,就可以看出精心编写的测试代码是否 bug,答案是必须要有。

go test -coverprofile=cover.prof ./...
go tool cover -html=cover.prof

github 地址

https://github.com/guonaihong/gout


更多关于Golang Go语言中 test 常见套路(1)的实战教程也可以访问 https://www.itying.com/category-94-b0.html

5 回复

Go 生态没 Junit,BDD 类似的语法吗?

更多关于Golang Go语言中 test 常见套路(1)的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


golang 也有 BDD 测试框架,只是主流的做法还是基于官方原生写法。

有个三方的 verify

可有 github 地址?

在Golang(通常简称为Go)中,编写测试是确保代码质量和可靠性的关键一环。以下是Go语言中编写测试的一些常见套路和最佳实践:

  1. 使用testing: Go标准库中的testing包是编写单元测试的基础。通过go test命令,你可以轻松运行和报告测试结果。

  2. 编写测试函数: 测试函数通常以Test为前缀,并接受一个指向*testing.T类型的指针。例如,func TestAddition(t *testing.T)。在测试函数内部,你可以使用t.Errort.Fail等方法来报告测试失败。

  3. 使用表驱动测试: 表驱动测试允许你通过定义输入和期望输出的表格来简化测试代码,提高可读性和可维护性。

  4. Mock和Stub: 对于依赖外部资源的测试,使用Mock或Stub对象来模拟这些依赖,可以使测试更加独立和可控。

  5. 基准测试: 除了单元测试,Go还支持基准测试(Benchmark)。通过定义以Benchmark为前缀的函数,你可以测量代码的性能。

  6. 使用testify等第三方库testify等第三方库提供了更丰富的断言和模拟功能,可以进一步简化测试代码的编写。

  7. 持续集成: 将测试集成到持续集成(CI)流程中,可以确保每次代码更改都会经过自动化测试,及时发现并修复问题。

掌握这些套路和最佳实践,将帮助你编写出高效、可靠且易于维护的Go代码。

回到顶部