GO语言测试

学习笔记 2020/04/05 Golang

testing包

testing包提供了自动化测试相关的框架,测试源码文件的主名称通常已被测试源码文件的名字作为开头,文件名必须以xx_test.go结尾,例如我们的被测试源码文件名称是demo.go 那么我们测试源码文件名称应该是demo_test.go


功能测试test

1、测试方法样式是func Testxxx(t *testing.T),方法名词必须以Test开头,xxx首字母需要大写,func TestFoo(t *testing.T)

2、测试方法参数必须 t *testing.T,函数中通过调用testing.T的Error, Errorf和FailNow, Fatal, FatalIf等方法说明测试不通过,以error 打印函数不会终止测试,Fatal类型会造成该单元测试终止。

当然通过调用Log方法用来记录测试的信息。

示例:

import "testing"

func TestFoo(t *testing.T) {
    t.Log("test")
}

单元测试代码

func TestAdd(t *testing.T) {
    a := 1
    b := 2
    c := Add(a, b)
    if c != 3 {
        t.Fatalf("err:%d + %d =%d", a, b, c)
    }
    t.Logf("%d + %d =%d", a, b, c)
}

func TestSub(t *testing.T) {
    a := 10
    b := 2
    c := Sub(a, b)
    if c != 8 {
        t.Fatalf("err:%d - %d = %d", a, b, c)
    }
    t.Logf("%d - %d =%d", a, b, c)
}


压力/性能测试benchmark

对于性能测试函数来说,其名称必须以Benchmark为前缀,并且唯一参数的类型必须是*testing.B类型的。

testing.B 拥有testing.T 的全部接口,同时还可以统计内存消耗,指定并行数目和操作计时器等

import "testing"

func BenchmarkFoo(t *testing.B) {
    t.Log("Benchmark")
}


性能测试

package testimport (
    "bytes"
    "strings"
    "testing"
)
    
func BenchmarkByte(t *testing.B) {
    b := bytes.Buffer{}
    b.WriteString("foo")
    for i := 0; i < t.N; i++ {
        b.String()
    }
}
    
func BenchmarkStr(t *testing.B) {
    s := strings.Builder{}
    s.WriteString("test")
    for i := 0; i < t.N; i++ {
        s.String()
    }
}

go test 不会主动执行benchmark函数的,需要增建 -test_bench,所以下面的代码不会执行任何压力测试

go test bench_test.go                  
ok      command-line-arguments  0.001s [no tests to run]
go test bench_test.go -test.bench=".*"  
goos: linux
goarch: amd64
BenchmarkByte-8         200000000                6.17 ns/op
BenchmarkStr-8          2000000000               0.34 ns/op
PASS
ok      command-line-arguments  2.577s

".*"表示测试全部的压力测试函数,执行当前测试文件的所有压力测试函数,
第一列表示被执行的测试函数,-8代表当前的cup执行核数,
第二列表示执行了总共次数,
第三列表示平均执行的耗时

执行单个的测试函数

go test bench_test.go -test.bench="Str"
goos: linux
goarch: amd64
BenchmarkStr-8          2000000000               0.34 ns/op
PASS
ok      command-line-arguments  0.719s

go test

go test +包名,执行这个包下面的所有测试用例

go test +测试源文件,执行这个测试源文件里的所有测试用例

go test -run选项,执行只定的测试用例


本文地址:https://www.stayed.cn/item/235

转载请注明出处。

本站部分内容来源于网络,如侵犯到您的权益,请 联系我

我的博客

人生若只如初见,何事秋风悲画扇。