Go工具链之代码测试神器go test详解

 更新时间:2023年07月20日 08:59:20   作者:路多辛  
这篇文章主要给大家介绍Go 工具链go test,go test 是 Go 工具链中的一个命令,用于编译和运行按照要求编写的 Golang 测试代码,并生成测试报告,感兴趣的同学跟着小编一起来看看本文吧

go test 作用

go test 是 Go 工具链中的一个命令,用于编译和运行按照要求编写的 Golang 测试代码,并生成测试报告。

要求将测试代码所在的文件命名为 *_test.go,如此命名的文件不会被 go build 命令编译,但是会被 go test 进行编译和运行。在 *_test.go 中有几种类型的函数:

  • 单元测试函数:以 Test 为函数名的前缀,用于测试程序的逻辑行为,参数必须是t *testing.T,无返回值。
  • 基准测试函数:以 Benchmark 为函数名的前缀,用于测试程序的性能,参数必须是 b *testing.B,无返回值。
  • 模糊测试函数:以 Fuzz 为函数名的前缀,用于测试程序的健壮性,参数必须是 f *testing.F,无返回值
  • 示例函数:以 Example 为函数名的前缀,用于提供示例文档,没有参数和返回值。

go test 使用方法和使用示例

go test 的使用方法比较简单,在项目的根目录或者某个包下直接运行如下命令:

go test 

go test 将会编译和运行当前项目或者当前包下所有的测试代码,并输出测试结果。

可以通过指定包或测试文件的路径来运行特定的测试,可以指定多个,也可以使用通配符进行匹配。例如:

go test [packages]
go test xxx.go

以下是一些常用的参数说明:

  • -v:显示详细的测试输出,包括每个测试用例的名称和结果。
  • -run:指定要运行的测试函数的正则表达式。
  • -cover:同时进行代码覆盖率分析,显示代码被执行的情况。
  • -coverprofile:将代码覆盖率分析的结果输出到指定文件中。
  • -count:指定测试的运行次数,默认为 1 次。
  • -timeout:设置测试的运行超时时间。
  • -bench:运行与性能测试有关的基准测试。
  • -benchmem:在运行基准测试时显示内存分配的统计信息。

这里要着重讲解一下 -coverprofile 参数,这个参数可以将测试用例的代码覆盖结果输出到指定文件中,然后可以借助 go tool cover 来做具体的分析。来看一下带上 -coverprofile 参数的效果,以 github.com/luduoxin/json-validator-go 项目为例,clone 代码后,切换到项目的 validator 目录,打开终端,执行如下命令:

 $ go test -coverprofile=c.out

截取 c.out 的前两行内容如下:

mode: set
github.com/luduoxin/json-validator-go/validator/scanner.go:11.30,15.2 3

第二行每个部分代表的意思如下:

"文件:起始行.起始列,结束行.结束列 该基本块中的语句数量 该基本块被执行到的次数"

搞清楚这个输出内容的格式可以做很多事情,例如自己做工具来统计长时间运行的项目的测试覆盖率,就可以在执行测试用例的过程中,先生成此种格式的文件,然后借助 go tool cover 这个工具来分析。

到此这篇关于Go工具链之代码测试神器go test详解的文章就介绍到这了,更多相关Go工具链go test内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • go语言基础教程之(包、变量和函数)

    go语言基础教程之(包、变量和函数)

    这篇文章主要介绍了go语言基础教程之(包、变量和函数)的相关资料,需要的朋友可以参考下
    2023-07-07
  • go goquery网页解析实现示例

    go goquery网页解析实现示例

    这篇文章主要为大家介绍了go goquery网页解析实现示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-08-08
  • golang解析html网页的方法

    golang解析html网页的方法

    今天小编就为大家分享一篇golang解析html网页的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-08-08
  • 聊聊go xorm生成mysql的结构体问题

    聊聊go xorm生成mysql的结构体问题

    这篇文章主要介绍了go xorm生成mysql的结构体问题,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2022-03-03
  • Go1.18新特性之泛型使用三步曲(小结)

    Go1.18新特性之泛型使用三步曲(小结)

    本文主要介绍了Go1.18新特性之泛型,是Go1.18的新特性,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-04-04
  • 深入解析golang bufio

    深入解析golang bufio

    这篇文章主要介绍了golang bufio解析,golang的bufio库使用缓存来一次性进行大块数据的读写,以此降低IO系统调用,提升性能,需要的朋友可以参考下
    2022-04-04
  • Go语言 如何实现RSA加密解密

    Go语言 如何实现RSA加密解密

    这篇文章主要介绍了Go语言实现RSA加密解密的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-05-05
  • golang抓取tcp包的实现方式

    golang抓取tcp包的实现方式

    使用`golang`的`packet`和`pcap`库可以抓取TCP数据包,首先,确保安装了`pcap`库,然后使用以下代码打开网络接口,设置过滤规则为“tcp”,开始捕获并解析TCP数据包,运行代码时需要管理员权限
    2024-12-12
  • 一文带你掌握Golang基础之通道

    一文带你掌握Golang基础之通道

    在Java中,多线程之间的通信方式有哪些?记得吗?Java多线程间通信的解决方案有很多种,比如:synchronized。在go中,就一种:通道,文中介绍的非常详细,感兴趣的同学可以参考下
    2023-05-05
  • win7下配置GO语言环境 + eclipse配置GO开发

    win7下配置GO语言环境 + eclipse配置GO开发

    这篇文章主要介绍了win7下配置GO语言环境 + eclipse配置GO开发,需要的朋友可以参考下
    2014-10-10

最新评论