造轮子 | golang | 单元测试
2019-05-19 本文已影响11人
yiekue
保障代码能够正确运行很重要的一步就是进行测试,单元测试能够有效的保证函数的正确运行,这对函数内代码的修改非常重要要,可以保证在改出bug第一时间就能暴露出来。go语言使用自带的
testing
和go test
可以方便的进行单元测试,本文以编写lru4go的单元测试为例记录下go自带的单元测试的基本使用方法。
基础
单元测试的函数一般都放到一个*_test.go
的文件中,这个文件和被测试的函数处于同一个包中,在编译的时候这个文件不会编译进入二进制文件中,在要测试的包目录下执行go test -v
就可以执行目录下所有*_test.go
文件中的测试用例:
测试用例编写
在*_test.go
文件中我们可以编写一条一条的测试用例。测试文件所属的包和被测试的函数同属一个包,并且要导入testing
包:
package lru4go
import (
"testing"
)
测试用例都是以Test
开头,并且传入一个* testing.T
的参数:
func TestLrucache_Set(t *testing.T) {
cache, _ := New(50)
if cache == nil {
t.Fatal("create cache failed!")
}
cache.Set("test1", 123)
v, err := cache.Get("test1")
if err != nil {
t.Fatal("get failed,err:", err)
}
if v == nil {
t.Fatal("get failed, value is nil")
}
}
t
的常用方法:
方法名 | 描述 |
---|---|
Log(args ...interface{}) |
打印日志,类似于Println
|
Logf(format string, args ...interface{}) |
打印日志,类似于Printf
|
SkipNow() |
跳过当前测试用例 |
Skip(args ...interface{}) |
相当于SkipNow() + Log()
|
Fail() |
标记失败,但继续执行当前用例 |
FailNow() |
标记失败而且停止执行当前用例 |
Fatal(args ...interface{}) |
相当于FailNow() + Log()
|
Error(args ...interface{}) |
相当于Fail() + Log()
|