文档章节

go test 常见套路(1)

guonaihong
 guonaihong
发布于 2019/09/16 08:59
字数 587
阅读 46
收藏 0

本文主要聊下 go 测试的常见套路,测试是开发过程中比较重要的一环节,特别是在 github 上撸代码,这是既要当开发,又要当测试。下面介绍常见套路让测试变的轻松点(最下面有本人 github 地址,感兴趣可一看)。

go test 函数

测试函数以 Test 开头,go test 就可以执行, 函数形参使用 testing.T 的指针

func TestJoin(t *testing.T) {
	urls := []string{
		"http://127.0.0.1:43471/v1",
	}

	want := []string{
		"http://127.0.0.1:43471/v1",
	}

	if joinPaths("", urls[0]) != want[0] {
		t.Errorf("got %s want %s\n", joinPaths("", urls[0]), want[0])
	}
}

go 性能测试

导入 testing 包,指定 B 对象,就可以编写性能测试代码,性能测试代码以 Benchmark 开头这是和标准库的约定, 在常见的 go test 选项后面跟一个-bench 选项。其中-benchmem 可以显示内存占用,下面的代码主要考量 bytes.Buffer 和 strings.Builder 的性能区别

func Benchmark_BytesWriteMem(b *testing.B) {
	var buf bytes.Buffer

	for i := 0; i < b.N; i++ {
		buf.WriteString("hello")
		buf.String()
	}
}

func Benchmark_builderMem(b *testing.B) {
	var s strings.Builder

	for i := 0; i < b.N; i++ {
		s.WriteString("hello")
		s.String()
	}
}
  • 输出
env GOPATH=`pwd` go test -bench "Benchmark_builderMem" -benchmem  -v .
goos: linux
goarch: amd64
pkg: github.com/guonaihong/test/string
Benchmark_builderMem-4   	200000000	         9.54 ns/op	      30 B/op	       0 allocs/op
PASS
ok  	github.com/guonaihong/test/string	2.831s


env GOPATH=`pwd` go test -bench "Benchmark_BytesWriteMem" -benchmem  -v .
goos: linux
goarch: amd64
pkg: github.com/guonaihong/test/string
Benchmark_BytesWriteMem-4   	  500000	    104201 ns/op	 1254075 B/op	       1 allocs/op
PASS
ok  	github.com/guonaihong/test/string	52.153s

只测试某个函数

go test 默认会把包下面的所有测试函数都跑一遍,如果从满屏幕测试函数里面找一个错误的日志很费力。 这时候需要只测试某个函数,可以使用-test.run 函数名的方式,该选项是支持正则表达式的。

go test -test.run=^TestHello ./...

查看测试代码覆盖度

如果 go 里面可以细化到哪些代码被测试过,就可以看出精心编写的测试代码是否 bug,答案是必须要有。

go test -coverprofile=cover.prof ./...
go tool cover -html=cover.prof

github 地址

https://github.com/guonaihong/gout

© 著作权归作者所有

guonaihong

guonaihong

粉丝 6
博文 83
码字总数 27591
作品 1
徐汇
程序员
私信 提问
spring boot多环境配置文件管理

这个网上内容比较多,套路就是使用 spring.profiles.active=dev 目前网上说的比较少的是,不同环境下多个配置文件管理 套路是 spring.profiles.active=dev,test-dev spring boot启动的时候,...

名字要响亮
2018/09/27
116
2
Codechef:Count on a Treap(线段树)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_35649707/article/details/83024247 传送门 题解: Treap的中序遍历是按照键值来排序后的序列,两点的lca...

DZYO
2018/10/12
0
0
哈,扯淡下人力,招人

要换我招人,我先看人品,情商,再看文化基础,智商,最后才看技术和经验。 不抗压的,出现矛盾意见时,3分钟就甩脸走人的见多了。哈。我自己也是,逐步适应的,谈论时,不上火,不较真,安心...

中山野鬼
2013/12/07
2.4K
27
微信运营:公众号文章能盈利吗?盘点变现模式

  前言:公众号文章肯定能盈利。   1、文章有哪些形式   先科普介绍都存在哪些形式,   基础的分类:情感/搞笑/资讯/汽车/数码/房产   常见的商业文章:软文/硬广   其他:活动稿...

公众开发运营官网
2018/11/14
0
0
物联网卡的常见套路,你中招了吗?

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_40798435/article/details/85126635 随着社会的不断进步和科技的发展,物联网技术的运用也变的越来越广泛,...

智宇物联
2018/12/20
0
0

没有更多内容

加载失败,请刷新页面

加载更多

IDEA 拉取、上传、更新 项目到 Gitee+GitHub_超详细超简单版

注:本人使用的idea是最新版(2019.1.2),要是其他的版本的不要惊慌〜,基本上都一样,没有什么太大的差别的 首先我要说一下,拉取项目分两个,一个,你就没有项目,拉取仓库的整个项目,而...

杨木发
今天
54
0
pyqt5环境搭建(Ubuntu19.10+pycharm+python3)

1.安装pyqt5 sudo apt-get install python3-pyqt5 sudo apt-get install qttools5-dev-tools sudo apt-get install qt5-default 2.安装pycharm 下载pycharm社区版安装包并解压 在桌面新建pyc......

小芯片
今天
54
0
Vue造轮子-tab组件(中)

1. 如果给一个标签一个class,标签本身又有class,vue是默认会合并的。只有两个属性是这样一个是class,一个是style。这样就比较好改样式。 <g-tabs-head class="red"></g-tabs> 2. 组件的...

ories
昨天
59
0
Windows 版本 Anaconda 配置加速源安装软件

C:\Users\lenovo\.condarc 首先安装Anaconda最新版本。 其次添加安装目录到环境变量。文本为 C:\ProgramData\Anaconda3\Library\bin 运行 conda 命令在 Windows 用户下生成文件 .conda...

白豆腐徐长卿
昨天
232
0
如何从Bash函数返回字符串值

我想从Bash函数返回一个字符串。 我将用Java编写示例以显示我想做的事情: public String getSomeString() { return "tadaa";}String variable = getSomeString(); 下面的示例在bash中...

javail
昨天
71
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部