加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Golang中的覆盖率测试

发布时间:2020-12-16 18:27:18 所属栏目:大数据 来源:网络整理
导读:Golang中的覆盖率测试 golang中提供了不少工具链,可以使用它们方便的进行单元测试、分析性能瓶颈,提供运行时信息等,总而言之是非常有用的。 go test这个工具大家用的应该比较多,之前我使用也大多是用来做单元测试的,go中做单元测试非常的方便,然而我忽

Golang中的覆盖率测试

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的读取。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读