Go语言-测试用例

编写单元测试用例

  • 文件名必须以'_test.go'结尾
  • 必须import "testing"这个包
  • 测试用例会按照源代码中写的顺序依次执行
  • 测试函数'TestXxx(t *testing.T)'中的参数是‘testing.T’,我们可以用该类型来记录错误或者是测试状态
  • 测试格式:‘func TestXxx(t *testing.T)’,'Xxx'部分可以为任意的字母数字组合,但是首字母不能是小写字母[a-z]
  • 函数中通过调用'testing.T'的'Error'、'Errorf'、'FailNow'、'Fatal'、‘FatalIf’方法,说明测试用例不通过,调用''Log'方法用来记录测试的信息

编写压力测试

  • 压力测试用例必须遵循如下格式,其中XXX可以是任意字母数字的组合,但是首字母不能是小写字母
    func BenchmarkXXX(b *testing.a) {...}
  • go test 不会默认执行压力测试的函数,如果要执行压力测试需要带上参数。-test.bench,语法: -test.bench="test_name_regex" ,例如 go test -test.bench=".*"表示测试全部的压力测试函数
  • 在压力测试用例中,需要才循环体内使用testing.B.N,以使测试用例正常运行
  • 文件名也必须以_test.go结尾

单元测试用例

源码

    package gotest

    import(
    )

    func Add(a, b float64) float64 {
        return a +  b
    }

测试用例

package gotest

import (
    "testing"
)

func Test_Add_1(t *testing.T) {
    if i := Add(6,2); i != 8 {
        t.Error("fail")
    } else {
        t.Log("pass")
    }
}

func Test_Add_2(t *testing.T) {
    if i := Add(6,2); i == 8 {
        t.Log("pass")
    } else {
        t.Error("fail")
    }
}

运行测试用例

    go test -v

测试用例执行结果

=== RUN   Test_Add_1
--- PASS: Test_Add_1 (0.00s)
    gotest_test.go:11: pass
=== RUN   Test_Add_2
--- PASS: Test_Add_2 (0.00s)
    gotest_test.go:17: pass
PASS
ok      github.com/shadowsocks/shadowsocks-go/sample-config/gotest  0.001s

压力测试用例

源码

package gotest

import(
    "testing"
)

func Benchmark_Add(b *testing.B) {
    for i := 0; i < b.N ; i++ {
        Add(3,4)
    }
}

func Benchmark_TimeConsumingFunction(b *testing.B) {
    b.StopTimer() //调用该函数停止压力测试的时间计数
    //做一些初始化工作,这些时间不影响我们测试函数本身的性能
    b.StartTimer()

    for i := 0; i < b.N; i++ {
        Add(5,6)
    }
}

运行结果

Benchmark_Add-4                         2000000000           0.38 ns/op
Benchmark_TimeConsumingFunction-4       2000000000           0.38 ns/op
PASS
ok      github.com/shadowsocks/shadowsocks-go/sample-config/gotest  1.594s

第一条显示Benchmark_add-4执行了20亿次,每次执行时间为0.38纳秒
第二条也一样

猜你喜欢

转载自blog.51cto.com/12880687/2130245