在go语言中的单元测试比较有意思,比如测试一个函数是很方便的,只需要将文件名修改为_test.go这样的后缀即可,我们新建一个目录xxx,然后新建xxx_test.go文件,当然这个xxx的名字你可以按照功能来命名,如下:
xxx_test.go
- package xxx
-
- import (
- "fmt"
- "testing"
- )
-
- func Hello(s string) string {
- return "Hello " + s
- }
-
- func TestHello(t *testing.T) {
- fmt.Println(Hello("寅恪光潜"))
- }
其中package在前面的文章,我一般建议大家使用的是目录名,同一目录下面的go文件的包名就统一定义。
这个TestHello就是测试Hello函数的意思,命令行进入这个xxx目录,然后输入:
C:\Users\Tony\xxx>go test
Hello 寅恪光潜
PASS
ok _/C_/Users/Tony/xxx 0.228s
通过测试,用时0.228s,如果是用vscode,将自动在TestHello上面出现 run test | debug test,然后我们可以直接点击它们进行测试即可,如下图:
会了前面的单元测试,对于基准测试就比较简单了,我们来测试下加法在你的电脑上的性能如何?
- func Benchmark_Add(b *testing.B) {
- var n int
- for i := 0; i < b.N; i++ {
- n++
- }
- }
命令行使用如下命令:
C:\Users\Tony\xxx>go test -v -bench=. -benchtime=5s xxx_test.go
goos: windows
goarch: amd64
cpu: Intel(R) Core(TM) i5-7500 CPU @ 3.40GHz
Benchmark_Add
Benchmark_Add-4 1000000000 0.2830 ns/op
PASS
ok command-line-arguments 0.556s
其中benchtime=5s是自定义测试时间5秒,我们可以看到在什么环境下的性能,计算了多少次,每次操作需要耗时多少。
当然也可以在vscode里面直接点击 run benchmark | debug benchmark 如下图:
对于一些操作,我们想测试其占用内存的情况,如下:
- func Benchmark_Alloc(b *testing.B) {
- for i := 0; i < b.N; i++ {
- fmt.Sprintf("%d ", i)
- }
- }
C:\Users\Tony\xxx>go test -v -bench=Alloc -benchmem xxx_test.go
goos: windows
goarch: amd64
cpu: Intel(R) Core(TM) i5-7500 CPU @ 3.40GHz
Benchmark_Alloc
Benchmark_Alloc-4 11920632 97.68 ns/op 17 B/op 1 allocs/op
PASS
ok command-line-arguments 1.510s
计算次数:11920632,每次操作耗时97.68 ns,然后就是每次操作需要占17个字节
同样的在vscode里面,直接点击 run benchmark | debug benchmark 即可,如下图:
有兴趣的伙伴,也可以加入我们的社区,交流讨论:https://bbs.csdn.net/forums/gogogo
一起学习进步,成为技术达人!