go test单元测试

test代码命名规则

  • 文件名要以 '_test' 结尾

  • 测试函数以 'Test' 开头

testing.T testing.B testing.M

func TestXXXXXXX(t *testing.T)
func BenchXXXXXX(b *testing.B)
func TestMain(m *testing.M)
  • TestMain(*testing.M)方法有些特殊,在一个包内只能有一个TestMain方法。这个方法会在测试方法运行前调用,相当于main()方法。我们可以在这个方法内做一些初始化数据操作等。

日志

| 方 法 | 备 注 |
| | |
| Log | 打印日志 |
| Logf | 格式化打印日志 |
| Error | 打印错误日志 |
| Errorf | 格式化打印错误日志 |
| Fatal | 打印致命日志 |
| Fatalf | 格式化打印致命日志 |

常用功能

测试指定函数

go test -v -run TestMqttImg mqtt_test.go

测试mqtt_test.go中的TestMqttImg函数

测试指定文件

测试指定的_test.go文件,需要注意的是在同一个包下,需要把测试文件和源文件都写出来:

go test -v user_test.go  user.go

测试文件夹内所有的test文件

直接在某个目录运行go test命令就会运行这个文件夹下所有的_test.go文件内的测试方法。

go test -v

如果文件夹里还包含文件夹,可以添加 "./..."来递归测试。

go test -v ./...

实例

被测函数testMe.go

package main

func f1(n int) int{
    if n == 0{
        return 0
    }

    if n == 1{
        return 1
    }
    return f1(n - 1) +f1(n - 2)
}

func f2(n int) int{
    if n == 0{
        return 0
    }

    if n == 1{
        return 2
    }

    return f2(n - 1) +f2(n - 2)
}

func s1(s string) int{
    if s == ""{
        return 0
    }

    n := 1
    for range s{
        n++
    }
    return n
}

func s2(s string) int{
    return len(s)
}

测试函数testMe_test.go

package main

import "testing"

func TestS1(t *testing.T){
    if s1("123456789") != 9{
        t.Error(`s1("123456789") != 9`)
    }

    if s1("") != 0{
        t.Error(`s1("") != 0`)
    }
}

func TestS2(t *testing.T){
    if s2("123456789") != 9{
        t.Error(`s2("123456789") != 9`)
    }

    if s2("") != 0{
        t.Error(`s2("") != 0`)
    }
}

func TestF1(t *testing.T){
    if f1(0) != 0{
        t.Error(`f1(0) != 0`)
    }
    if f1(1) != 1{
        t.Error(`f1(1) != 1`)
    }

    if f1(2) != 1{
        t.Error(`f1(2) != 1`)
    }

    if f1(10) != 55{
        t.Error(`f1(10) != 55`)
    }
}

func TestF2(t *testing.T){
    if f2(0) != 0{
        t.Error(`f1(0) != 0`)
    }
    if f2(1) != 1{
        t.Error(`f1(1) != 1`)
    }

    if f2(2) != 1{
        t.Error(`f1(2) != 1`)
    }

    if f2(10) != 55{
        t.Error(`f1(10) != 55`)
    }
}

执行测试函数

测试所有函数

D:\git\Go>go test ./src/testMe.go ./src/testMe_test.go -v
=== RUN   TestS1
--- FAIL: TestS1 (0.00s)
        testMe_test.go:7: s1("123456789") != 9
=== RUN   TestS2
--- PASS: TestS2 (0.00s)
=== RUN   TestF1
--- PASS: TestF1 (0.00s)
=== RUN   TestF2
--- FAIL: TestF2 (0.00s)
        testMe_test.go:47: f1(1) != 1
        testMe_test.go:51: f1(2) != 1
        testMe_test.go:55: f1(10) != 55
FAIL
FAIL    command-line-arguments  0.108

测试指定函数

D:\git\Go>go test ./src/testMe.go ./src/testMe_test.go -run='s1' -v
testing: warning: no tests to run
PASS
ok      command-line-arguments  0.106s [no tests to run]

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×