Golang 测试
单元测试
简单示例
从一个简单的样例开始:
使用go test
命令行工具进行测试:
报告方法
单元测试中,传递给测试函数的参数是 *testing.T
类型。它用于管理测试状态并支持格式化测试日志。测试日志会在执行测试的过程中不断累积,并在测试完成时转储至标准输出。
当测试函数返回时,或者当测试函数调用 FailNow
、 Fatal
、Fatalf
、SkipNow
、Skip
、Skipf
中的任意一个时,则宣告该测试函数结束。跟 Parallel
方法一样,以上提到的这些方法只能在运行测试函数的 goroutine 中调用。
至于其他报告方法,比如 Log
以及 Error
的变种, 则可以在多个 goroutine 中同时进行调用。
上面提到的系列包括方法,带 f
的是格式化的,格式化语法参考 fmt
包。
T 类型内嵌了 common 类型,common 提供这一系列方法,我们经常会用到的(注意,这里说的测试中断,都是指当前测试函数):
1)当我们遇到一个断言错误的时候,标识这个测试失败,会使用到:
在 FailNow
方法实现的内部,是通过调用 runtime.Goexit()
来中断测试的。
2)当我们遇到一个断言错误,只希望跳过这个错误,但是不希望标识测试失败,会使用到:
在 SkipNow
方法实现的内部,是通过调用 runtime.Goexit()
来中断测试的。
3)当我们只希望打印信息,会用到 :
注意:默认情况下,单元测试成功时,它们打印的信息不会输出,可以通过加上 -v
选项,输出这些信息。但对于基准测试,它们总是会被输出。
4)当我们希望跳过这个测试,并且打印出信息,会用到:
5)当我们希望断言失败的时候,标识测试失败,并打印出必要的信息,但是测试继续,会用到:
6)当我们希望断言失败的时候,标识测试失败,打印出必要的信息,但中断测试,会用到:
来源:https://books.studygolang.com/The-Golang-Standard-Library-by-Example/chapter09/09.1.html#t-%E7%B1%BB%E5%9E%8B
:blush:总结:记住Fail
、FailNow
、SkipNow
和Log
,其他四种都是类似于这三种的实现。
基准测试
简单样例
运行基准测试命令:
以上参数说明:
-bench <regex_args>
:使用哪些测试用例,后面可以跟正则表达式来匹配所要使用的测试用例;
-benchtime <time>
:指定基准测试时间,默认1s
,也可以是次数,另外,还可以设置10x
,表示运行十遍;
-count <count>
:指定基准测试的次数;
-benchmem
:可以度量内存分配的次数;
go test <args>
参考:https://pkg.go.dev/cmd/go#hdr-Testing_flags
参考链接