教程集 www.jiaochengji.com
教程集 >  Golang编程  >  golang教程  >  正文 Go语言中的测试框架(testing)用法简单入门

Go语言中的测试框架(testing)用法简单入门

发布时间:2021-04-12   编辑:jiaochengji.com
教程集为您提供Go语言中的测试框架(testing)用法简单入门等资源,欢迎您收藏本站,我们将为您提供最新的Go语言中的测试框架(testing)用法简单入门资源

Go语言中的测试

单元测试Unit Testing是在软件开发过程中要进行的最低级别的测试活动,软件的独立单元将在与程序的其他部分相隔离的情况下进行测试。go语言中提供了单元测试的功能。通过在Go语言包testing提供自动化测试功能的接口,达到功能测试和性能测试的目的。

一、测试文件的基本结构

  • 一个基本的测试文件如下
    // helloWorld_test.go
    
    package test
    
    import "testing"
    
    func TestHello(t *testing.T){
    	t.Log("Hello World")
    }
    
  • Go语言中区分测试代码与普通源程序代码的在于:
    • 文件名:test测试文件明明以_test.go结尾,例如,我们可以将命名为helloWorld_test.go。之后在终端输入go test,编译器会自动将其编译成可执行文件,输出信息类似如下(其中-v是打印详细信息的参数)
      [wangjunhuan@localhost test]$ go test -v
      === RUN   TestHello
      --- PASS: TestHello (0.00s)
      hello_test.go:6: Hello World
      PASS
      ok      github.com/user/test    0.007s
      
    • 代码中必须import testing(但是package test不是必须的,只是包命名时凑巧叫这个名字), testing包里为我们提供了测试中所需要的函数接口,例如打印日志,输出错误信息,基准测试所用变量等。
    • 一个文件内可以有多个测试用例(函数),函数名必须是Test[ functionName]。上述代码中,函数参数的类型为*testing.T,在单元测试中可以为我们打印日志信息等,像上面的使用test.T中的Log()方法打印字符串。类似的参数类型还有*testing.B,用于基准测试。不过函数参数不是必须的,可以为空。我们还发现测试文件里不需要main()函数

二、运行单元测试

正如前面所说的只要在终端中输入go test_test.go内的Test[ functionName]就会被执行。默认情况下,我们可以不加参数,这样子所有test文件都会被测试,并且打印简单的运行结果。
和需要打印详细信息会用到-v一样,有许多参数是十分利于我们的测试的:

  • -run regexp:只运行与正则表达式regexp相匹配的函数,例如-run=print,那么就会执行包含有print开头的函数
  • -v:打印测试的详细命令
  • -bench:执行对应的benchmarks,例如go test -bench=. benchmark_test.go表示运行benchmark_test.go下的所有的基准测试。(有关基准测试的内容在后面在细讲)
  • -cover:开启测试覆盖率

testing.T中常用的打印日志的方法,以下方法只是打印日志类型的不同,起到打印不同种类的信息的作用。在Error()和Fatal()后程序会被自动标记为Fail,但是不会强行结束程序。

方法备注
Log()打印日志
Logf()格式化打印日志
Error()打印错误日志
Errorf()格式化打印错误日志
Fatal()打印致命日志
Fatalf()格式化打印致命日志

如果只是想标记错误信息,可以使用Fail()函数,如果想标记并强制退出,可以使用FailNow()函数。

三、基准测试(性能测试)

基准测试的例子

package code11_3
import "testing"
func Benchmark_Add(b *testing.B) {
    var n int
    for i := 0; i < b.N; i   {
        n  
    }
}
  • 留意到函数是以Benchmark_开头的,参数使用testing.B类型。我们可以看到函数内部使用了b.N,也是为何能进行基准测试的原因。
  • 基准测试框架对一个测试用例的默认测试时间是 1 秒。开始测试时,当以 Benchmark 开头的基准测试用例函数返回时还不到 1 秒,那么 testing.B 中的 N 值将按 1、2、5、10、20、50……递增,同时以递增后的值重新调用基准测试用例函数。

测试结果

$ go test -v -bench=. benchmark_test.go
goos: linux
goarch: amd64
Benchmark_Add-4           20000000         0.33 ns/op
PASS
ok          command-line-arguments        0.700s

可以看到与上述结果的区别在于行4:首先显示基准测试名称,2000000000 表示测试的次数,也就是 testing.B 结构中提供给程序使用的 N。“0.33 ns/op”表示每一个操作耗费多少时间(纳秒)。

参考资料:
go test命令(Go语言测试命令)完全攻略

到此这篇关于“Go语言中的测试框架(testing)用法简单入门”的文章就介绍到这了,更多文章或继续浏览下面的相关文章,希望大家以后多多支持JQ教程网!

您可能感兴趣的文章:
Go语言中的测试框架(testing)用法简单入门
go语言——测试
go语言代码测试
Go语言测试——TDD
想系统学习GO语言(Golang
golang 示例测试example_Golang基础入门11 | Testing
Go语言发展历史、核心、特性及学习路线
【七天从零实现ORM框架】Day02:database/sql基础
20 个有用的 Go 语言微服务开发框架
Go之开发小功能集合(viper获取配置信息,test编写测试单元,用户目录获取,JWT安全校验,字符串去重,Swag...

[关闭]
~ ~