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内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 关于golang指针的有限操作详解

    关于golang指针的有限操作详解

    传统意义上来说,指针是一个指向某个确切的内存地址的值,这个内存地址可以是任何数据或代码的起始地址,在Go语言中有几种东西可以代表"指针",本文给大家介绍的是关于golang指针的有限操作,感兴趣的同学可以参考一下
    2023-08-08
  • Go语言如何通过通信共享内存

    Go语言如何通过通信共享内存

    这篇文章主要为大家介绍了Go语言如何通过通信共享内存实现示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-11-11
  • 详解Go语言中自定义结构体能作为map的key吗

    详解Go语言中自定义结构体能作为map的key吗

    在Go中,引用类型具有动态的特性,可能会被修改或指向新的数据,这就引发了一个问题—能否将包含引用类型的自定义结构体作为map的键呢,本文就来和大家想想讲讲
    2023-06-06
  • go面向对象方式操作JSON库实现四则运算

    go面向对象方式操作JSON库实现四则运算

    这篇文章主要为大家介绍了go面向对象方式操作JSON库实现四则运算的示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-07-07
  • golang 中获取字符串个数的方法

    golang 中获取字符串个数的方法

    这篇文章主要介绍了golang 中获取字符串个数 ,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-08-08
  • golang interface判断为空nil的实现代码

    golang interface判断为空nil的实现代码

    这篇文章主要介绍了golang interface判断为空nil的实现代码,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-04-04
  • golang利用pprof与go-torch如何做性能分析

    golang利用pprof与go-torch如何做性能分析

    这篇文章主要给大家介绍了关于golang利用pprof与go-torch如何做性能分析的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-07-07
  • 详解Golang中创建error的方式总结与应用场景

    详解Golang中创建error的方式总结与应用场景

    Golang中创建error的方式包括errors.New、fmt.Errorf、自定义实现了error接口的类型等,本文主要为大家介绍了这些方式的具体应用场景,需要的可以参考一下
    2023-07-07
  • 深入理解Golang中指针的用途与技巧

    深入理解Golang中指针的用途与技巧

    在 Go 语言中,指针是一种重要的概念,了解和正确使用指非常关键,因此本文小编就来和大家讲讲Golang 中指针的概念与用法,希望对大家有所帮助
    2023-05-05
  • Go爬虫(http、goquery和colly)详解

    Go爬虫(http、goquery和colly)详解

    goquery可以避免操作复杂的正则表达式,它可以直接根据url获取一个Document对象,然后根据标签选择器、类选择器和id选择器获取相应的选择对象,进行自定义的操作,这篇文章主要介绍了Go爬虫(http、goquery和colly),需要的朋友可以参考下
    2022-09-09

最新评论