Go+ 单元测试教程(4.20)

举报
liuzhen007 发表于 2022/02/26 22:25:27 2022/02/26
【摘要】 ​目录Go+ 概述正文导入包测试文件和测试方法的命名规则单元测试集效果演示Go+ 概述Go+ 是一门融合工程开发的 Go、数据科学领域的 Python、编程教学领域的 Scratch,以 Python 之形结合 Go 之心,让工程师处理数据不需要学习新的开发语言,让初学者学习编程、开发作品的门槛更低的编程语言。正文单元测试是编写符合规范的 Go+ 程序的重要组成部分。测试包提供了编写单元测试...

目录


Go+ 概述

正文

导入包

测试文件和测试方法的命名规则

单元测试集

效果演示


Go+ 概述

Go+ 是一门融合工程开发的 Go、数据科学领域的 Python、编程教学领域的 Scratch,以 Python 之形结合 Go 之心,让工程师处理数据不需要学习新的开发语言,让初学者学习编程、开发作品的门槛更低的编程语言。

正文

单元测试是编写符合规范的 Go+ 程序的重要组成部分。测试包提供了编写单元测试所需的工具,使用 go test 命令就可以启动单元测试。Go+ 提供了相关的单元测试方法,今天我们就来了解一下这方面的一些内容。

导入包

Go+ 在启动替代进程时,一般会使用的工具库是 testing 包,导入方式如下:

import (
    "testing"
)

测试文件和测试方法的命名规则

我们在命令测试文件和测试方法时,是需要遵守一定命名规则的。

1)命名测试文件时,规则是 原文件名 + _test.gop,比如原文件是 add.gop,其对应的单元测试文件就是 add_test.gop。

2)命名测试方法时,规则是 Test + 原方法名,比如方法是 Print(),其对应的单元测试方法就是 TestPrint()。

示例代码:

func IntMin(a, b int) int {
    if a < b {
        return a
    }
    return b
}

func TestIntMinBasic(t *testing.T) {
    ans := IntMin(2, -2)
    if ans != -2 {
        t.Errorf("IntMin(2, -2) = %d; want -2", ans)
    }
}

单元测试集

有时候,编写单元测试很可能是重复的,因此尝试使用表格驱动的方式来完成,其实就是把测试输入项和预期输出项列在单元测试表格中,只需要一次循环遍历就可以完成所有测试项的单元测试。

示例代码:

func TestIntMinTableDriven(t *testing.T) {
    var tests = []struct {
        a, b int
        want int
    }{
        {0, 1, 0},
        {1, 0, 0},
        {2, -2, -2},
        {0, -1, -1},
        {-1, 0, -1},
    }
    for _, tt := range tests {
        testname := fmt.Sprintf("%d,%d", tt.a, tt.b)
        t.Run(testname, func(t *testing.T) {
            ans := IntMin(tt.a, tt.b)
            if ans != tt.want {
                t.Errorf("got %d, want %d", ans, tt.want)
            }
        })
    }
}

效果演示

执行如下命令,开始启动单元测试。

go test -v

上述代码的执行结果:

== RUN   TestIntMinBasic
--- PASS: TestIntMinBasic (0.00s)
=== RUN   TestIntMinTableDriven
=== RUN   TestIntMinTableDriven/0,1
=== RUN   TestIntMinTableDriven/1,0
=== RUN   TestIntMinTableDriven/2,-2
=== RUN   TestIntMinTableDriven/0,-1
=== RUN   TestIntMinTableDriven/-1,0
--- PASS: TestIntMinTableDriven (0.00s)
    --- PASS: TestIntMinTableDriven/0,1 (0.00s)
    --- PASS: TestIntMinTableDriven/1,0 (0.00s)
    --- PASS: TestIntMinTableDriven/2,-2 (0.00s)
    --- PASS: TestIntMinTableDriven/0,-1 (0.00s)
    --- PASS: TestIntMinTableDriven/-1,0 (0.00s)
PASS
ok      examples/testing-and-benchmarking    0.023s


作者简介:大家好,我是 Data-Mining(liuzhen007),是一位音视频技术爱好者,前后就职于传统广电巨头和音视频互联网公司,具有丰富的音视频直播和点播相关经验,对 WebRTC、FFmpeg 和 Electron 有非常深入的了解,公众号:玩转音视频。同时也是 CSDN 博客专家、华为云社区云享专家、签约作者,欢迎关注我分享更多干货!

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。