博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
GO随笔-单元测试-基础测试
阅读量:6303 次
发布时间:2019-06-22

本文共 1389 字,大约阅读时间需要 4 分钟。

单元测试

前几天,Leader让我学习GO单元测试并且组内分享。经过这些天在网上查阅资料和实践。总结出以下内容。


基础知识:

GO为我们提供了测试框架,go test,让我们能够很容易的进行单元测试。
但必须遵守以下几点规则:

  • 测试文件必须以_test.go结尾
  • 单元测试文件名_test.go前面的部分最好是被测方法所在go文件的文件名。(不一样也可以运行go test,但是应该遵守统一的规范)
  • 单元测试的函数必须以Test开头,是公开函数
  • 测试函数必须接收一个指向testing.T类型的指针(依测试目的而定,如主要是测试性能,则用testing.B等),并且不能返回任何值。
  • 函数名最好是Test+测试函数名(依测试类型而定,Benchmark等)。

只要遵守以上规则,很容易可以编写一个GO单元测试。

在网上查阅资料时,看到有一篇文章写道:

图片描述

测试代码的文件放置的位置可以随意?

顿时感觉GO真的好智能,迫不及待的尝试了一下:
图片描述

难道需要指定路径?

图片描述

可能是我没有理解这句话的含义,但我个人感觉,还是放在一个目录(包)下吧。

package也可以随意写?
尝试后结论,不能。

写一个简单的单元测试用例

add.go

package addfunc Add(a, b int) int{    return a+b}

add_test.go

package addimport "testing"func TestAdd(t *testing.T){    if sum:=Add(1,2); sum!=3{        t.Error("fail")//日志一般要写成f(x)=y, want z的形式    } else {        t.Log("success")    }}

go test -v即可看到测试结果

图片描述

(这里有一点我踩过的小坑,当想指定测试文件的时候go test file_test.go会报错,因为需要后面还需要接上被测试的文件:go test file_test.go file.go

只是一个最简单的基本测试。另一种测试方法叫做:表组测试。其实就是多个基本测试。

将上面test简单改造

package addimport "testing"func TestAdd(t *testing.T){    var tests = []struct{        date []int        want int    }{        {[]int{1, 2}, 3},        {[]int{2, 5}, 7},        {[]int{3, 9}, 11},    }    for _,v := range tests{        if sum:=Add(v.date[0], v.date[1]); sum!=v.want{            t.Errorf("Add(%d, %d) = %d, want %d", v.date[0], v.date[1], v.date[0]+v.date[1], v.want)        } else {            t.Log("success")        }    }}

运行结果

图片描述
能够清楚看到每组测试结果。这种形式能够轻易添加测试用例。

转载地址:http://rhfxa.baihongyu.com/

你可能感兴趣的文章
php引用(&)
查看>>
IPv6 Address Type
查看>>
mount /mnt/cdrom 为什么提示说找不到介质!!!
查看>>
关于nginx的master进程可worker进程的概念
查看>>
我的友情链接
查看>>
mysql cluster解决方案
查看>>
CSS vertical-align 属性
查看>>
OC 类和对象
查看>>
我的友情链接
查看>>
linux下安装red5
查看>>
我的友情链接
查看>>
一位牵手腾讯应届毕业生的求职杂谈
查看>>
在github上写博客
查看>>
Friendly Filmic Tonemapping
查看>>
我的友情链接
查看>>
cisco路由器的DNS配置
查看>>
问题-提示“请确定磁盘未满或未被写保护而且文件未被使用”
查看>>
Java IO: 管道
查看>>
pku1083 Moving Tables
查看>>
UML系列 (四) 实战机房收费系统
查看>>