CXYVIP官网源码交易平台_网站源码_商城源码_小程序源码平台-丞旭猿论坛
CXYVIP官网源码交易平台_网站源码_商城源码_小程序源码平台-丞旭猿论坛
CXYVIP官网源码交易平台_网站源码_商城源码_小程序源码平台-丞旭猿论坛

简单聊一聊GO语言中的TEST单元测试-源码交易平台丞旭猿

写在前面

  1. 最开始给自己定的目标是三天一更,但现在想想其实没有这么多可以拿来写的,后面尽量还是一周一更吧。

  2. 我不想硬水文章,觉得还是遇到实际有价值的才写下来。

  3. 这公众号就当一个练习文笔的地方了,毕竟自己写出来的东西别人都看不懂,自己怎么又算完全理解了呢?

单元测试

说实话,从最开始啥也不懂的时候,我就觉得单元测试这玩意没啥用,毕竟光是把需求搞定后,还要花时间在写测试上,想想就觉得难受。但是试想一下,如果你一口气就写完上千行代码,debug 的过程也不会很轻松。这个时候写好测试就显得尤为重要了,对于一些逻辑较为复杂的函数,同时添加一些测试用例,即时确保准确度。

Go Test

Go 语言中测试都是依赖go test命令,并且编写测试代码和普通代码的过程是类似的,并不需要学习新的语法、规则或者工具。

Go 语言中的测试文件都是以_test.go结尾,这些测试文件并不会在你使用go build命令时被编译进去。

_test.go文件中有三种类型的函数,单元测试函数、基准测试函数和示例函数。

类型格式作用
测试函数函数名前缀为Test测试程序的一些逻辑行为是否正确
基准函数函数名前缀为Benchmark测试函数的性能
示例函数函数名前缀为Example为文档提供示例文档

测试函数格式

每个测试函数都需要导入testing包,测试函数的基本格式如下:

func TestName(t *testing.T){

// …

}

如果你使用的是vscode或者goland,大部分情况下你都不需要手动导入包,编辑器会帮你自动导入。

测试函数的名字必须以Test开头,后缀名必须以大写字母开头,举几个例子:

func TestAdd(t *testing.T){ … }

func TestSum(t *testing.T){ … }

测试函数案例

这里我拿一个并发测试的案例来举例:

func service() string {

time.Sleep(time.Millisecond * 50)

return “Done”

}

func otherTask() {

fmt.Println(“working on something else”)

time.Sleep(time.Millisecond * 100)

fmt.Println(“Task is done”)

}

// 这种情况是完全串行的

func TestService(t *testing.T) {

fmt.Println(service())

otherTask()

}

func AsyncService() chan string {

//retCh := make(chan string)

retCh := make(chan string, 1)

go func() {

ret := service()

fmt.Println(“returned result”)

retCh

fmt.Println(“service exited”)

}()

return retCh

}

func TestAsyncService(t *testing.T) {

retCh := AsyncService()

otherTask()

fmt.Println(

time.Sleep(time.Second)

}

运行这个测试文件很简单,你可以在终端输入go test命令,或在测试函数旁执行运行按钮。

vscode

goland

如果是通过终端来执行测试,可以执行go test -v以展示更多详细信息。

声明:本文部分素材转载自互联网,如有侵权立即删除 。

© 版权声明
THE END
喜欢就支持一下吧
点赞0赞赏 分享
相关推荐
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容