F008e1a5f21faed78443178fcc16c553
Go 单元测试

一、前言

上一篇 我们通过一个 web 服务器实例,讲解了 Go 的环境搭建和使用到的 Go 语法知识。相信大家已经能感受到 Go 的简单、高效。除了简单、高效,Go 还有一个特点就是可靠

如果你学习过如何编程方面的理论知识,很可能见过许多地方提过单元测试。比如,《重构》这本书中就提到,要重构,首先应该构建一个完善的测试体系

Go 的可靠性,不单单表现在其强类型的语法,也在于 Go 对单元测试的重视

  • Go 语言源代码和内置库自身的单元测试完备性
  • Go 语言自带单元测试命令

二、Go 单元测试

如上一篇所讲,我们先上实例,再回顾。

  1. 新建 main.go

    package main
    
    import "fmt"
    
    func Add(x, y int) int {
       return x + y
    }
    
    func main() {
     sum := Add(1, 2)
     fmt.Print(sum)
    }
  2. 新建 main_test.go

    package main
    
    import "testing"
    
    func TestAdd(t *testing.T) {
     sum := Add(1, 2)
     if sum != 3 {
         t.Error("Add 1 and 2 result is not 3!")
     }
    }
  3. 运行
    go test main_test.go main.go -v -cover

三、回顾

编写单元测试的步骤:

  1. 新建 xxx_test.go 测试文件

  2. 导入 testing 包

  3. 编写 Test 开头的测试函数

    // main_test.go   ①  新建 xxx_test.go 测试文件
    
    package main
    
    import "testing"   ②  导入 testing 包
    
    func TestAdd(t *testing.T) {    ③ 编写 Test 开头的测试函数
     sum := Add(1, 2)
     if sum != 3 {
         t.Error("Add 1 and 2 result is not 3!")
     }
    }

go test 命令

go test main_test.go main.go -v -cover
这里加了两个参数,分别是 -v 和 -cover。-v 的作用是看到详细的执行信息。-cover 是输出单元测试的覆盖率

单元测试的覆盖率,一定程度上表现了程序的稳健程度。覆盖率可以帮组我们找到遗漏的bug,在开发中非常实用,代码尽量要追求 100% 的覆盖率,这样不但能降低代码的出错率,也能帮助我们分析代码结构,做到单一职责

四、优化

Go Test Explorer

安装 Go Test Explorer,帮助我们便捷地执行单元测试。

Go Test Explorer

Go Test Explorer

Go Autotest

安装 Go Autotest,帮助我们自动运行测试,让我们更专注于 Coding。

top Created with Sketch.