Golang Test
极客时间《Go 语言从入门到实践》学习笔记 10,题图来自网络
35 | 单元测试
前面的课程采用了单元测试的方法来写,但是应该都是不太规范的写法,到这一节介绍了相对规范的单元测试写法。
之前写过一段时间的 Ruby,对于 Rails 的那种把程序代码和单元测试代码分开放置的“约定”比较喜欢,不知道 Go 语言这边有没有类似的框架。
Java SprintCloud 的单元测试似乎也是采用了类似的布局。
在导入 github.com/stretchr/testify/assert 的时候,遇到了 permission deny 的问题,最终的解决方案,其实是在 GOROOT 的目录下,给了 pkg 目录控制权限,可能不太规范。
有一点好奇,GOPATH、GOROOT、GOBIN 这三个环境变量的作用,特别是在相对高版本的 Go 语言这边。
36 | Benchmark
Benchmark 用于对代码片段或者第三方库进行性能测试
方法名以 Benchmark 开头
参数类型是 *testing.B
用 b.ResetTimer( ) 和 b.StopTimer() 来隔离与性能测试无关的代码
性能测试交给 framework 来做,将需要测试的代码放在循环中,循环的次数由 framework 来返回
在留言里面看到关于将 buf 的声明是否放在性能测试中,也就是外层 for 循环的讨论
如果从性能比较上来讲,buf 和 str 的声明都应该放在控制测试次数的 for 循环内。
但是如果把 buf 和 str 的声明都挪到 for 循环的外面,可以看到对于 str 的影响会更大一些,但是这个和本次性能测试无关,应该是由 string 和 bytes.Buff 的特性决定的。
37 | BDD
最前面的一个 . ,表示将 import 进来的 package 的方法是在当前名字空间的,可以直接使用。
试图从命令行启动 Web 端的 goconvey 时,先是发现找不到 $GOPATH/bin/goconvey,原因是在 go get 的时候写错了。应该是:
而不是
然后接下来的错误是自己的 8080 端口被 Jenkins 占用了
比较可惜的是,之前的测试里面有特意输出 error 的代码,所以就 panic 了
话说回来,在我的刻板印象里面,国内的团队大部分都还没有搞定 TDD,那么使用 BDD 应该也不会太多。
我倒是希望能加入一个 TDD 的团队,有 BDD 更好。
版权声明: 本文为 InfoQ 作者【escray】的原创文章。
原文链接:【http://xie.infoq.cn/article/60673b4ad91da6501eb85efd4】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论