go测试用例该如何写

go测试用例该如何写

go语言为我们提供了很好的测试框架,通过该测试框架能很轻松的进行功能测试、基准测试、样本测试和用于测试的Main函数。通过该测试框架,可以直接在包中进行所有方法(无论是可导和不可导)的测试,异常方便。

  1. 功能测试

    功能测试的方法定义:func TestXxx(t *testing.T)

    功能测试中的T结构体中提供Error(),Errorf(),Fail()FailNow()等一系列的错误信号方法。其中Error() 等价当失败时的Log()方法,Errorf()等价当失败时的Logf()方法。

    Fail()方法标记当前测试不通过,但是当前测试还会继续往下执行。

    FailNow()该方法也是标记当前测试不通过并且终止当前测试,但不会影响其他的测试。

    简单的测试代码如下:

    func TestFail(t *testing.T) {
    a := 1
    if a != 2 {
        t.Fail()
    }
    fmt.Printf("a: %v\n", a)
    b := 2
    if b != 1 {
        t.FailNow()
    }
    fmt.Printf("b: %v\n", b)
    }
    
    func TestSuccess(t *testing.T) {
    fmt.Println("hello")
    }

    测试的效果如图:

    fail效果

    通过上图可以发现,使用Fail()方法并没有结束TestFail这个测试,但是FailNow()结束了TestFail这个测试但是对TestSuccess这个测试没有影响。

    Failed()报告这个测试方法是否失败。Fatal()Falalf()等价调用FailNow()Log()Log()Logf()两个方法只有在测试失败或者在test.v标志设置即go test -v

    Parallel()方法,表示这个测试是在别的测试中运行的测试。

    Skip()SkipNow()Skipf()方法表示当前的测试被跳过。

    func TestSkip(t *testing.T) {
    t.Skip("aaa")
    fmt.Print("bbb")
    }
    func TestSuccess(t *testing.T) {
    fmt.Println("hello")
    }

    测试的结果如图:

    skip

    从图中我们确实可以发现TestSkip()方法没有执行。

  2. 基准测试

    基准测试的方法定义:func BenchmarkXxx(b *testing.B)。要使基准测试生效需要在输入go test命令后添加参数-bench .这个参数。

    如果在运行前基准需要一些昂贵的设置,需要使用b.ResetTimer()将计数器重置。

    func BenchmarkHello(b *testing.B) {
    big := big.NewInt(20000)
    b.ResetTimer()
    for i := 0; i < b.N; i++ {
        big.BitLen()
    }
    }

    testing.B结构体中的方法有很多。其中有很多方法的命名和testing.T结构体中的方法一样。同样的命名方法的作用是一样的。相同命名的方法作用就不在从复。

    ReportAlllocs()该方法分配统计内存。它等价于设置-test.benchmem参数,但是只对调用这个方法的测试有效。

    使用-test.benchmem参数的效果:

    test.benchmem

    ResetTimer()方法的作用是重置计时器。但是当计时器已经在运行时就不受该方法的影响。

    SetBytes()记录单一操作中bytes的操作数。它将在测试结果中报告ns/op和MB/s。例子:

    func BenchmarkHello(b *testing.B) {
    big := big.NewInt(20000)
    b.ResetTimer()
    for i := 0; i < b.N; i++ {
        b.SetBytes(2000)
        big.BitLen()
    }
    }

    测试的结果如图:

    setBytes

    StartTimer()开始定时,但框架会自动被调用,但是也可以在调用StopTimer()后重启定时。

    StopTimer()停止定时。

  3. 样本测试

    样本测试的方法定义:func Example()func ExampleF()func ExampleTfunc ExampleT_M()

    在该测试的最后需要结束的注释,需要以Output:开头。并且和标准的输出作比较。当Output和标准输出不同时该测试失败。例子:

    func ExampleHello() {
    fmt.Println("hello")
    //Output:hello
    }

    输出结果:

    example

    当我把Output:后面的内容修改后,在进行测试的结果如图:

    fail

    func Example()func ExampleF()func ExampleTfunc ExampleT_M() 这是一些命名规范。

    func ExampleF()表示方法或者类别。

    func ExampleT_M表示测试类别T的M方法。

  4. 用于测试的Main函数

    测试的Main函数方法定义:func TestMain(m *testing.M)

    用于在测试前设置一些参数或者在测试后拆卸一些参数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值