Go+ 单元测试教程(4.20)

Posted Data-Mining

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Go+ 单元测试教程(4.20)相关的知识,希望对你有一定的参考价值。

目录

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

以上是关于Go+ 单元测试教程(4.20)的主要内容,如果未能解决你的问题,请参考以下文章

Go单元测试--模拟服务请求和接口返回

Go-单元测试详解与代码

Go的单元测试技巧

go语言学习笔记 — 基础 — go工具(5.1):单元测试 —— 测试和验证代码的框架

Go语言基础之单元测试

4Go语言单元测试性能测试与监控