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

发布于 1周前 作者 zlyuanteng 来自 Go语言

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代码。

回到顶部