Golang中的覆盖率测试

上一篇 / 下一篇  2018-04-26 13:19:31 / 个人分类:覆盖率测试

  golang中提供了不少工具链,可以使用它们方便的进行单元测试、分析性能瓶颈,提供运行时信息等,总而言之是非常有用的。
  go test这个工具大家用的应该比较多,之前我使用也大多是用来做单元测试的,go中做单元测试非常的方便,然而我忽视了覆盖率测试
  单元测试覆盖了多少代码呢?golang的go test工具其实还支持显示覆盖率,最简单的用法就是执行
  go test -c -covermode=count -coverpkg ./...
  来编译一个后缀为.test的可执行文件,执行后,它会执行所有的单元测试代码,然后输出覆盖率的报告。
  这其实是统计单元测试的覆盖率,也就是白盒测试的覆盖率。
  然而我们这里的功能测试告诉我,这个还支持黑盒测试的覆盖率统计,我那时候还楞了一下,想了想不大可能吧。于是测试给我发了下面这个文章,我自己读了下,真是大脑洞,真想的出来。
  按着这份文章,就是在某个单元测试文件中,定义一个函数,当某个flag被提供的时候,执行main函数来运行主循环。
  package main
  import (
      "flag"
      "testing"
      "github.com/cihub/seelog"
  )
  var systemTest *bool
  var testConfigPath *string
  func init() {
      systemTest = flag.Bool("systemTest", false, "Set to true when running system tests")
      testConfigPath = flag.String("configpath", "", "-configpath <lua config file path>")
  }
  func TestEntry(t *testing.T) {
      //  system tests?
      flag.Parse()
      if *systemTest {
          seelog.Info("system test running main")
          //  set the configpath variable
          g_configpath = testConfigPath
          main()
      }
  }
  当然我的本体程序本身就有一个输入参数,这里就做了个小技巧,在init函数里把参数全解析了,假设解析了原始的参数,则赋值给main中的参数变量,main会判断这个变量是否被初始化了,假设没有的话,会再次的进行flag的读取。

TAG: 软件测试技术 覆盖率测试

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

日历

« 2021-01-14  
     12
3456789
10111213141516
17181920212223
24252627282930
31      

数据统计

  • 访问量: 23590
  • 日志数: 25
  • 建立时间: 2017-07-24
  • 更新时间: 2018-06-08

RSS订阅

Open Toolbar