GoConvey框架使用指南
在软件开发中,产品代码的正确性通过测试代码来保证,而测试代码的正确性谁来保证?答案是毫无争议的,肯定是程序员自己。这就要求测试代码必须足够简单且表达力强,让错误无处藏身。我们要有一个好鼻子,能够嗅出测试的坏味道,及时的进行测试重构,从而让测试代码易于维护。笔者从大量的编码实践中感悟道:虽然能写出好的产品代码的程序员很牛,但能写出好的测试代码的程序员更牛,尤其对于TDD实践。 要写出好的测试代码,必须精通相关的框架。对于Golang程序员来说,至少需要掌握下面两个框架: 本文将主要介绍GoConvey框架的基本使用方法,从而指导读者更好的进行测试实践,最终写出简单优雅的测试代码。 GoConvey是一款针对Golang的测试框架,可以管理和运行测试用例,同时提供了丰富的断言函数,并支持很多 Web 界面特性。 Golang虽然自带了单元测试功能,并且在GoConvey框架诞生之前也出现了许多第三方测试框架,但没有一个测试框架像GoConvey一样能够让程序员如此简洁优雅的编写测试代码。 在命令行运行下面的命令: go get github.com/smartystreets/goconvey 运行时间较长,运行完后你会发现: 在$GOPATH/src目录下新增了github.com子目录,该子目录里包含了GoConvey框架的库代码 在$GOPATH/bin目录下新增了GoConvey框架的可执行程序goconvey 注:上面是在gopath时代使用GoConvey的API前的安装方法,而在gomod时代一般不需要先显式安装(gomod机制会自动从goproxy拉取依赖到本地cache),除非要使用GoConvey的web界面,这时需要提前安装GoConvey的二进制,命令为go install github.com/smartystreets/goconvey@latest 。 我们通过一个案例来介绍GoConvey框架的基本使用方法,并对要点进行归纳。 我们实现一个判断两个字符串切片是否相等的函数StringSliceEqual,主要逻辑包括: 两个字符串切片长度不相等时,返回false 两个字符串切片一个是nil,另一个不是nil时,返回false 遍历两个切片,比较对应索引的两个切片元素值,如果不相等,返回false 否则,返回true 根据上面的逻辑,代码实现如下所示: func StringSliceEqual(a, b []string) bool { if len(a) != len(b) { return false } if (a == nil) != (b == nil) { return false } for i, v := range a { if v != b[i] { return false } } return true } 对于逻辑"两个字符串切片一个是nil,另一个不是nil时,返回false"的实现代码有点不好理解: if (a == nil) != (b == nil) { return false } 我们实例化一下a和b,即[]string{}和[]string(nil),这时两个字符串切片的长度都是0,但肯定不相等。 先写一个正常情况的测试用例,如下所示: import ( "testing" .
https://www.jianshu.com/p/e3b2b1194830