当前位置:网站首页 > 技术博客 > 正文

单元测试是功能测试吗



Go 单元测试概要

Go 语言的单元测试默认采用官方自带的测试框架,通过引入 testing 包以及 执行 命令来实现单元测试功能。

在源代码包目录内,所有以 为后缀名的源文件会被 认定为单元测试的文件,这些单元测试的文件不会包含在 的源代码构建中,而是单独通过 go test 来编译并执行。

Go 单元测试的基本规范

Go 单元测试的基本规范如下:

当运行 go test 命令时,go test 会遍历所有的 中符合上述命名规则的函数,然后生成一个临时的 main 包用于调用相应的测试函数,然后构建并运行、报告测试结果,最后清理测试中生成的临时文件。

一个简单的 xxx_test.go 的单元测试文件如下,里面有两个测试方法:

go test -v 执行单测并打印详情

运行方法:进入到包内,运行命令 go test -v ,参数 -v 可以打印详情。 也可以只运行某个方法的单元测试: go test -v -run="xxx" ,支持正则表达式。

go test -v -cover 执行单测并计算覆盖率

go test 工具还有个功能是测试单元测试的覆盖率,用法为 go test -v -cover, 示例如下:

从覆盖率来看(coverage: 85.7% of statements),单元测试没有覆盖全部的代码,只有 85.7% ,我们可以通过如下命令将 cover 的详细信息保存到cover.out 中。

然后再通过

查看每个方法的覆盖率。

这里发现是 Abs 方法没有覆盖完全,因为我们的用例只用到了正数的那个分支。 还可以使用 html 的方式查看具体的覆盖情况。

会默认打开浏览器,将覆盖情况显示到页面中:

可以看出 Abs 方法的负数分支没有覆盖到。将 TestAbs 方法修改如下即可:

再次运行:

运行结果如下:

这个说明已经达到了 100% 的覆盖率了。

Go 单测覆盖度的相关命令汇总如下:

测试单个文件

通常,一个包里面会有多个方法,多个文件,因此也有多个 test 用例,假如我们只想测试某一个方法的时候,那么我们需要指定某个文件的某个方法

如下:

总共有7个文件,其中有三个test文件,如果直接运行 go test,就会测试所有test.go文件了。

但是,假如我们只更新了 rtvhub.go 里面的代码,所以我只想要测试 rtvhub.go 里面的某个方法,那么就需要指定文件,具体的方法就是同时指定我们需要测试的test.go 文件和 它的源文件,如下:

测试单个文件下的单个方法

在测试单个文件之下,假如我们单个文件下,有多个方法,我们还想只是测试单个文件下的单个方法,要如何实现?我们需要再在此基础上,用 -run 参数指定具体方法或者使用正则表达式。

假如 test 文件如下:

测试所有方法

直接 go test 就行

go run -race 执行竞争检测

当两个goroutine并发访问同一个变量,且至少一个goroutine对变量进行写操作时,就会发生数据竞争(data race)。 为了协助诊断这种bug,Go提供了一个内置的数据竞争检测工具。 通过传入-race选项,go tool就可以启动竞争检测。

示例代码

演示结果

  • 上一篇: 程序员接单网站
  • 下一篇: json.cpp
  • 版权声明


    相关文章:

  • 程序员接单网站2024-11-11 19:01:03
  • 数字图像处理实践2024-11-11 19:01:03
  • ldconfig命令怎么用2024-11-11 19:01:03
  • java流式编程原理2024-11-11 19:01:03
  • policycoreutils-python 离线安装2024-11-11 19:01:03
  • json.cpp2024-11-11 19:01:03
  • linux发行版本有哪些?2024-11-11 19:01:03
  • java多线程编程实例2024-11-11 19:01:03
  • 什么是私人dns模式2024-11-11 19:01:03
  • spi接口的使用方法2024-11-11 19:01:03