美文网首页
go中testing包中的数据类型M/T/B/PB

go中testing包中的数据类型M/T/B/PB

作者: 五岁小孩 | 来源:发表于2024-03-17 14:13 被阅读0次

简介

testing.M 对main方法进行的测试
testing.T 对函数/方法进行单元测试
testing. B 对性能进行的测试
testing.PB -

执行测试

命令 作用
go test 【包名】或 go test . 运行当前package内的所有用例
go test ./... 或 go test 【目录名】/... 递归执行当前目录下所有用例:
go test -v [单元测试文件]. // 如 go test -v foo_test.go 运行指定文件单元测试
go test -v [单元测试文件] -run [单元测试函数]. 运行指定单元测试用例://如 go test -v foo_test.go -run TestFoo
go test -bench . 压测

执行单元测试时出现 调用函数 undefined 的解决方法:

如 执行 xj_test.go 下的TestXj函数,调用xj.go文件下的Xj函数

go test -v xj_test.go -run TestXj ———> 会出现Xj函数undefined

更换,加上调用函数的文件:

go test -v xj_test.go xj.go -run TestXj

testing.M

[Go]Go单元测试的前置和后置调用--TestMain - 掘金 (juejin.cn)

  setup()  // 运行前
    code := m.Run()  //运行运行测试。 它返回一个退出代码以传递给 os.Exit。
    teardown()  // 运行后
    os.Exit(code) //退出码

testing.T

对函数/方法进行单元测试

  • 常用

    t.Run() // 执行子单元测试
    t.Log() // 输出日志,t.Logf()
    t.Name() // 输出单元测试的名称
    t.Parallel() // 所有有t.Parallel()调用的单元测试 并行执行
    t.TempDir()  // 返回一个临时用于测试的目录地址,每次执行都不一样
    t.Cleanup() //  Cleanup 注册一个在测试(或子测试)及其所有子测试完成时要调用的函数。 清理函数将在最后添加,首先调用的顺序中调用
    t.Setenv()  // 设置测试环境变量,测试完成后自动清除,不能用于有t.Parallel()的测试函数
    t.Helper() // 用于标注该函数是帮助函数,报错时将输出帮助函数调用者的信息,而不是帮助函数的内部信息,比如A函数是公共函数,B,C都是测试函数,且都调用A函数,那么假设A报错了,那并不知道是B还是C调用,所以此时就需要在A函数内部加上次标注,让报错信息更准确,有助于定位。
    t.Fail() // 函数出现失败之后仍然执行
    t.Deadline() // 无
    
    func TestT(t *testing.T) {
      t.Cleanup(func() {
          // 将在所有子函数执行后执行
          fmt.Println("测试Cleanup......")
      })
      t.Run("t.Fail()", func(t *testing.T) {
          Expect(t).Equal(true, false)
      })
      t.Run("Setenv", func(t *testing.T) {
          t.Setenv("xj", "chenxiaoji")
          getenv := os.Getenv("xj")
          t.Log("getenv:", getenv)
      })
      t.Run("v1", func(t *testing.T) {
          name := t.Name()
          t.Log(name)
          dir := t.TempDir()
          t.Log(dir)
      })
    }
    
    
  • 判定失败接口
    • Fail 失败继续
    • FailNow 失败终止
  • 打印信息接口
    • Log 数据流 (cout 类似)
    • Logf format (printf 类似)
    • SkipNow 跳过当前测试
    • Skiped 检测是否跳过
  • 综合接口产生
    • Error / Errorf 报告出错继续 [ Log / Logf + Fail ]
    • Fatel / Fatelf 报告出错终止 [ Log / Logf + FailNow ]
    • Skip / Skipf 报告并跳过 [ Log / Logf + SkipNow ]

testing.B

  • 首先 , testing.B 拥有testing.T 的全部接口。
  • SetBytes( i uint64) 统计内存消耗, 如果你需要的话。
  • SetParallelism(p int) 制定并行数目。
  • StartTimer / StopTimer / ResertTimer 操作计时器
  • b.RunParallel(func(pb *testing.PB) {}) // 可以测试并发性能
type BenchmarkResult struct {
    N         int           // 迭代次数
    T         time.Duration // 基准测试花费的时间
    Bytes     int64         // 一次迭代处理的字节数
    MemAllocs uint64        // 总的分配内存的次数
    MemBytes  uint64        // 总的分配内存的字节数
}

testing.PB

其他

-test.short

go test -v ./... -test.short

代码中可以使用if testing.Short() {} 语句,能够检测go test命令行中有无-test.short,然后执行自己的业务代码(推荐是用来缩减单元测试的代码块)

参考资料

微信公众平台 (qq.com)

相关文章

  • Go单元测试&性能测试

    Go自带了测试框架和工具,在testing包中,以便完成单元测试(T类型)和性能测试(B类型)。 一般测试代码放在...

  • golang 1.7之后高级测试方法之子测试,子基准测试(sub

    介绍 在go1.7之后,testing包T和B的引入了一个Run方法,用于创建subtests 和 sub-ben...

  • 单元测试和压力测试

    写在前面: testing.T用来进行单元测试,*testing.B用来进行压力测试,检测函数的性能 go tes...

  • golang测试

    go语言提供了对测试的支持。在go的标准库文档中的testing包页面,对go语言的测试方法有较为详细的使用说明,...

  • Golang学习笔记-测试

    Go的标准库提供了几个与测试有关的库,其中最主要的是testing包,testing包需要与go test命令以及...

  • Golang标准库——testing

    testing testing 提供对 Go 包的自动化测试的支持。通过 go test 命令,能够自动执行如下形...

  • golang 性能测试

    格式: func BenchmarkXxx(b *testing.B) 简单代码: 运行 go test -ben...

  • Go单元测试框架简单使用

    约束: 使用go自身的单元测试框架testing包来写单元测试有如下约束: 单元测试,要导入 testing 包;...

  • 15. Go极简教程 编写测试

    Go拥有一个轻量级的测试框架,它由 go test 命令和 testing 包构成 hello.go 编写待测试的...

  • Time

    Yesterday can’t go back, but we can go back. Time can’t b...

网友评论

      本文标题:go中testing包中的数据类型M/T/B/PB

      本文链接:https://www.haomeiwen.com/subject/exgozdtx.html