Lesson4 Go语言工程实践之测试|青训营笔记

24 阅读1分钟

2.3 测试

测试是避免事故的最后一道屏障

回归测试 -> 集成测试 -> 单元测试,从上到下,覆盖率逐层变大,成本逐层降低

2.3.1 单元测试

  • 所有测试文件以_test.go结尾
  • func TestXxx(*testing.T)
  • 初始化逻辑放在 TestMain 中
  • 示例:

    /* hello.go */
    package main
    ​
    func HelloBanana() string {
      return "banana"
    }
    ​
    /* hello_test.go */
    package main
    ​
    import (
      "github.com/stretchr/testify/assert"
      "testing"
    )
    ​
    func TestHelloBanana(t *testing.T) {
      output := HelloBanana()
      expectOutput := "banana"
      assert.Equal(t, expectOutput, output) // 用第三方包对比
    }
    

    然后执行命令:

    (base) ➜  go test -v hello.go hello_test.go
    === RUN   TestHelloBanana
    --- PASS: TestHelloBanana (0.00s)
    PASS
    ok      command-line-arguments  0.007s
    
  • 覆盖率

    表示要测试的函数运行了多少行,即覆盖比例,在测试命令后加 --cover 即可

    一般覆盖率50%-60%,较高覆盖率80%+

  • Mock、基准测试(压力测试) 略