使用Golang如何实现一个单元测试功能-创新互联

使用Golang如何实现一个单元测试功能?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

站在用户的角度思考问题,与客户深入沟通,找到景谷网站设计与景谷网站推广的解决方案,凭借多年的经验,让设计与互联网技术结合,创造个性化、用户体验好的作品,建站类型包括:成都网站设计、网站制作、企业官网、英文网站、手机端网站、网站推广、域名与空间、虚拟空间、企业邮箱。业务覆盖景谷地区。

1 概述

C/C++和Java(以及大多数的主流编程语言)都有自己成熟的单元测试框架,前者如Check,后者如JUnit,但这些编程框架本质上仍是第三方产品,为了执行单元测试,我们不得不从头开始搭建测试工程,并且需要依赖于第三方工具才能生成单元测试的覆盖率。

相比之下,Go语言官方则提供了语言级的单元测试支持,即testing包,而且仅通过go工具本身就可以方便地生成覆盖率数据,也就是说,单元测试是Go语言的自带属性,除了好好设计自己的单元测试用例外,开发者不需要操心工程搭建的任何细节。没错,Golang就是这么任性。

2 单元测试

下面我们以《The Go Programming Language》6.5节的比特容器为例,介绍如何通过testing包和go工具集进行单元测试。

2.1 工程目录

不是说好的,Go语言单元测试不需要搭建测试工程么?其实,Golang的测试工程只有一句话:对file.go新建file_test.go文件,并在其中编写测试用例。所以,我们所谓的工程目录其实就是:

$ go env | grep GOPATH


GOPATH="/home/pirlo/go"


$ tree /home/pirlo/go/src/github.com/pirlo-san/let-us-go


/home/pirlo/go/src/github.com/pirlo-san/let-us-go


├── bitvector
│ ├── bitvector.go
│ └── bitvector_test.go
├── LICENSE
└── README.md

/home/pirlo/go是我的GOPATH,其中的github.com/pirlo-san/let-us-go是一个git工程,bitvector则是这个工程下的一个子模块,即比特容器模块,bitvector.go是模块的实现文件,bitvector_test.go则是用于测试比特容器的文件。

2.2 比特容器的实现

Golang没有容器类型,多数容器都是通过map[type]bool实现的,但是通过map实现在某些场景下比较浪费内存,比如容器元素都是一些很小的非负整数的场景:0~31,其实,我们只需要一个uint32类型4个字节就可以了,但是如果采用map[uint32]bool实现,则对每个元素都需要一个uint32的key和bool类型的value。在C/C++语言内,可以很容易地通过位域的方式达到节省内存的目的,那么Golang可不可以采用类似的方式实现呢?当然可以喽。

2.2.1 定义

type IntSet struct {
 words []uint
}

const (
 wordBitCount = (32 << (^uint(0) >> 63))
)

本文标题:使用Golang如何实现一个单元测试功能-创新互联
分享路径:http://scyanting.com/article/dpjdpd.html