写点什么

Golang Test

用户头像
escray
关注
发布于: 2021 年 04 月 23 日
Golang Test

极客时间《Go 语言从入门到实践》学习笔记 10,题图来自网络

35 | 单元测试


前面的课程采用了单元测试的方法来写,但是应该都是不太规范的写法,到这一节介绍了相对规范的单元测试写法。


之前写过一段时间的 Ruby,对于 Rails 的那种把程序代码和单元测试代码分开放置的“约定”比较喜欢,不知道 Go 语言这边有没有类似的框架。


Java SprintCloud 的单元测试似乎也是采用了类似的布局。


在导入 github.com/stretchr/testify/assert 的时候,遇到了 permission deny 的问题,最终的解决方案,其实是在 GOROOT 的目录下,给了 pkg 目录控制权限,可能不太规范。


sudo chmod -R 777 pkg
复制代码


有一点好奇,GOPATH、GOROOT、GOBIN 这三个环境变量的作用,特别是在相对高版本的 Go 语言这边。

36 | Benchmark


Benchmark 用于对代码片段或者第三方库进行性能测试


  • 方法名以 Benchmark 开头

  • 参数类型是 *testing.B

  • 用 b.ResetTimer( ) 和 b.StopTimer() 来隔离与性能测试无关的代码

  • 性能测试交给 framework 来做,将需要测试的代码放在循环中,循环的次数由 framework 来返回


在留言里面看到关于将  buf 的声明是否放在性能测试中,也就是外层 for  循环的讨论


var buf bytes.Buff
复制代码


如果从性能比较上来讲,buf 和 str 的声明都应该放在控制测试次数的 for 循环内。


但是如果把 buf 和 str 的声明都挪到 for 循环的外面,可以看到对于 str 的影响会更大一些,但是这个和本次性能测试无关,应该是由 string 和 bytes.Buff 的特性决定的。

37 | BDD


. "github.com/smartystreets/goconvey/convey"
复制代码


最前面的一个 . ,表示将 import 进来的 package 的方法是在当前名字空间的,可以直接使用。


试图从命令行启动 Web 端的 goconvey 时,先是发现找不到 $GOPATH/bin/goconvey,原因是在 go get 的时候写错了。应该是:


github.com/smartystreets/goconvey
复制代码


而不是


github.com/smartystreets/goconvey/convey
复制代码


然后接下来的错误是自己的 8080 端口被 Jenkins 占用了


> $GOPATH/bin/goconvey -port 8081
复制代码


比较可惜的是,之前的测试里面有特意输出 error 的代码,所以就 panic 了


话说回来,在我的刻板印象里面,国内的团队大部分都还没有搞定 TDD,那么使用 BDD 应该也不会太多。


我倒是希望能加入一个 TDD 的团队,有 BDD 更好。

发布于: 2021 年 04 月 23 日阅读数: 15
用户头像

escray

关注

Let's Go 2017.11.19 加入

Let's Go,用 100 天的时间从入门到入职

评论

发布
暂无评论
Golang Test