• 源代码目录结构
  • 源代码文件
  • 测试文件
  • 执行测试
  • 总结

    源代码目录结构

    我们在gotest包中创建两个文件,目录结构如下所示:

    1. [GoExpert]
    2. |--[src]
    3. |--[gotest]
    4. |--unit.go
    5. |--unit_test.go

    其中unit.go为源代码文件,unit_test.go为测试文件。要保证测试文件以“_test.go”结尾。

    源代码文件

    源代码文件unit.go中包含一个Add()方法,如下所示:

    1. package gotest
    2. // Add 方法用于演示go test使用
    3. func Add(a int, b int) int {
    4. return a + b
    5. }

    Add()方法仅提供两数加法,实际项目中不可能出现类似的方法,此处仅供单元测试示例。

    测试文件

    测试文件unit_test.go中包含一个测试方法TestAdd(),如下所示:

    1. package gotest_test
    2. import (
    3. "testing"
    4. "gotest"
    5. )
    6. func TestAdd(t *testing.T) {
    7. var a = 1
    8. var b = 2
    9. var expected = 3
    10. actual := gotest.Add(a, b)
    11. if actual != expected {
    12. t.Errorf("Add(%d, %d) = %d; expected: %d", a, b, actual, expected)
    13. }
    14. }

    通过package语句可以看到,测试文件属于“gotest_test”包,测试文件也可以跟源文件在同一个包,但常见的做法是创建一个包专用于测试,这样可以使测试文件和源文件隔离。GO源代码以及其他知名的开源框架通常会创建测试包,而且规则是在原包名上加上”_test”。

    测试函数命名规则为”TestXxx”,其中“Test”为单元测试的固定开头,go test只会执行以此为开头的方法。紧跟“Test”是以首字母大写的单词,用于识别待测试函数。

    测试函数参数并不是必须要使用的,但”testing.T”提供了丰富的方法帮助控制测试流程。

    t.Errorf()用于标记测试失败,标记失败还有几个方法,在介绍testing.T结构时再详细介绍。

    执行测试

    命令行下,使用go test命令即可启动单元测试,如下所示:

    1. E:\OpenSource\GitHub\RainbowMango\GoExpertProgrammingSourceCode\GoExpert\src\gotest>go test
    2. PASS
    3. ok gotest 0.378s
    4. E:\OpenSource\GitHub\RainbowMango\GoExpertProgrammingSourceCode\GoExpert\src\gotest>

    通过打印可知,测试通过,花费时间为0.378s。

    总结

    从上面可以看出,编写一个单元测试并执行是非常方便的,只需要遵循一定的规则:

    • 测试文件名必须以”_test.go”结尾;
    • 测试函数名必须以“TestXxx”开始;
    • 命令行下使用”go test”即可启动测试;