配置go test

当我们完成我们的正常代码逻辑编写以后,后续会涉及到各种需求的剔除,解决这些需求,我们就无法避免需要进行代码的更改,因此为了确保后续更改不会发生一些不可预料的问题,所以添加一些测试,从而保证代码的稳定性是必要的。
之前用python、perl的时候,经常都是自己凑数据,直接运行代码,也许作用类似,但是不可否认手动测试非常的繁琐,所以慢慢的向自动化测试的方向靠拢。在这里记录一下 使用go单元测试的效果。
go的单元测试有自己的命名约定(*_test.go) 和对应的 Go 的 testing 包和go test 命令,您可以快速编写和执行测试。
当然前提时我们已经针对我们的业务需求,完成了相关代码的开发工作。

这里我们以 max.go 为例,代码如下:

1
2
3
4
5
6
7
8
9
package main
/* max函数返回两个数的最大值 */
func max(num1, num2 int) int {
if num1 > num2 {
return num1
} else {
return num2
}
}

创建测试代码

接下来我们构建我们的测试代码

  1. 首先我们在项目代码目录下,创建对应的测试代码max_test.go(测试代码文件名必须使用 _test.go 为后缀才能被 go test 识别,前缀不一定和go编码文件名一致)
  2. 测试代码文件和项目代码文件在同一个目录下,应该属于相同的包
  3. 撰写我们的测试函数,需要注意测试函数的命名规则,测试函数必须以 Test 开头,后面接测试函数名。(非TestName 格式的函数不会被执行)
  4. 代码中,我们可以构建相应的输入文件,执行对应的函数,然后对函数返回值进行校验,确定什么样的返回值测试通过(t.Log,或不做任何处理),什么样的返回值测试不通过(t.Error)。

    测试代码示例(clib_test.go)如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    package main // 注意这里需要和项目代码包名一致

    import (
    "testing"
    )
    // 自定义的测试函数 函数名称必须以 Test 开头
    func TestClib(t *testing.T) {
    if max(1, 2) == 2 {
    t.Log("max(1,2)==2 pass")
    } else {
    t.Error("max(1,2)==2 fail")
    }
    }
  5. 完成测试代码编写后,我们使用 go test 命令来运行我们的测试代码,
    测试代码分析结果符合预期,返回结果如下

    1
    2
    3
    4
    5
    6
    7
    PS D:\Git_Repo\Work_temp\Go-test> go test -v
    === RUN TestClib
    clib_test.go:9: max(1,2)==2 pass
    --- PASS: TestClib (0.00s)
    PASS
    ok github.com/test 1.175s
    PS D:\Git_Repo\Work_temp\Go-test>

    如果测试失败,示例如下(这里我们把测试代码的 max(1,2)==2 改成了 max(1,2)==1

    1
    2
    3
    4
    5
    6
    7
    8
    PS D:\Git_Repo\Work_temp\Go-test> go test -v
    === RUN TestClib
    clib_test.go:11: max(1,2)==1 fail
    --- FAIL: TestClib (0.00s)
    FAIL
    exit status 1
    FAIL github.com/test 0.431s
    PS D:\Git_Repo\Work_temp\Go-test>

这样完成单元测试以后,后续我们需要对我们的代码进行验证时,就可以通过构建 *test.go 文件进行代码的单元测试啦。

Reference

GO Documentation

-------------本文结束感谢您的阅读-------------