Go单元测试与性能测试

在Go语言中做单元测试和性能测试是一件非常容易的事情——Go自带了测试工具包,testing包。

通常,测试代码和功能代码在同一个包中,测试代码以“_test”结尾。测试有两种类型,一种是单元测试(UnitTest),一种是性能测试(Benchmark)。接下来将会介绍一下如何写这两种测试。

单元测试

首先创建一个测试文件,命名foo_test.go(提示: 以test结尾

接下来是创建测试函数,Test_Foo(提示:测试函数以Test开头,传入*testing.T指针),代码如下:

func Test_Foo(t *testing.T) {

}

这里什么也没做,只是创建了一个空的测试函数,但确实是能运行的测试函数!如果你的编辑器支持测试提示(提示:vscode支持),那么你可以在函数上面看到一行小字,如下:

直接点击就可以运行测试。如果没有这种提示,那么可以执行命令:go test foo_test.go 来运行这个测试,测试的结果将会是:

ok      command-line-arguments  0.007s

做一个完整的测试和其他的语言或者和我们想象中的并没有什么差异。基本流程都是:传入我们假设的参数,执行待测试的函数,断言待测试的函数的输出是否和我们预期的相符合。

一个简单的单元测试的例子,测试max函数是否能返回正确的值。

func max(a int, b int) int {
	if a >= b {
		return a
	}
	return b
}

func Test_Foo(t *testing.T) {
	a := 1
	b := 2
	c := max(a, b)
	if c != 2 {
		t.Errorf("max()=%d, expected %d", c, 2)
	}
}

把 max函数 中的 if a>=b 改成 a<=b,测试将不会通过。

性能测试

性能测试用于测试某个函数或者某段代码的性能,测试代码以Benchmark开头,传入*testing.B指针。

针对上面的max函数创建一个性能测试,代码如下:

func Benchmark_Max(b *testing.B) {
	for i := 0; i < b.N; i++ {
		max(1, 2)
	}
}

如果你的编辑器支持,那么你将会在Benchmark上面看到一行小字

如果不支持,那么可以用命令行运行:go test foo_test.go --bench=.

你可能还喜欢下面这些文章

不给以后的你找麻烦,编写单元测试吧

原本我想要写造福后人,请为你的程序编写单元测试吧。突然觉得这样写会不会太高尚了一些,想想还是不给以后的自己找麻烦,编写单元测试比较好。一直都在隐式的做着单元测试你可能没有听过单元测试,或者听过,但没有使用单元测试框架来做单元测试,又或者对单元测试框架不屑一顾等等...(等等,这不是在说我自己嘛)好了,在你没有使用单元测试框架之前,其实你一直在不知不觉中使用单元测试。比如,当你写完了一个方法的时候,你会在下面调用这个方法,然后看看运行的结果,哦,对了,要的就是这个结果。这就是一个单元测试啊!你对这个方法做了一个测试,传n个参数进入,输出一个结果,结果与预期一致,通过;结果与预期不一致,失败,de

Go入门:三、函数的声明和调用

这是我Go学习笔记的第三篇!接下来学习的是Go的函数声明和调用。我的语言学习过程一般分为下面几个:1. 变量和数据类型2. 流程控制方法3. 函数声明和调用4. 面向对象5. 语言特性6. 标准库函数声明func 函数名称(参数表) 返回值类型 { // 函数体}写一个函数是非常简单的,掌握语法格式就可以了。函数是一个功能的封装,能让函数体内的代码得到很好的复用。比如我要输出个人信息,我可以把个人信息封装到函数里面,后续直接调用这个函数而不是每次都print一堆信息了上面定义的函数没有参数,也没有返回值,非常简单的一个函数。如果我想让姓名可变,那么可以定义一个带有参数的函数接下来定义一个有

C++入门:三、函数

这是我学习C++的第三篇笔记,函数。我的学习路径是现在学习的是函数的声明、定义、调用等相关知识。函数声明和定义函数的声明包含返回类型,函数名字,0个或者多个形参,无函数体,通常在头文件中对函数进行声明。函数的定义包含返回类型,函数名字,0个或多个形参,以及函数体。比如写一个求阶乘的函数,可以写成下面这样写一些简单的函数大多数语言都差不多,不过可惜每种语言或多或少都有自己的特色,这是比较令人头秃的地方。函数的参数函数可以带有0或多个参数,每个参数都需要声明类型。参数传递可以传值和传引用。如果形参是引用类型,那么它将绑定到对应的实参中,我们成为传引用。否则,将会把实参的值拷贝后赋值给形参,我们成为

C++实现python字符串的endswith方法

可以使用的或方法配合比较运算符来模拟方法的功能。下面是一个示例函数,它检查一个字符串是否以另一个字符串结束:在这个示例中,函数接受两个参数:和。函数首先检查的长度是否大于或等于的长度。如果不是,那么显然不能以结束,函数返回。否则,函数使用方法从的末尾提取与长度相同的子字符串,并将其与进行比较。如果它们相等,那么以结束,函数返回。否则,函数返回。请注意,这个函数是区分大小写的。如果你想要一个不区分大小写的版本,你可以在比较之前使用和函数将和转换为小写。在这个版本中,函数首先使用和函数将和转换为小写。然后,它调用函数来检查转换后的字符串是否以结束。

创建自己的composer包之怎样制作composer包

项目做多了之后,可能会慢慢总结出自己的代码库出来,当在新的项目中使用的时候,总不能一直是复制粘贴。这个时候,composer就能派上用场了。一个项目开始,使用composer就能够加载所需要的依赖,非常方便。这个时候,来做一个自己的包吧!使用命名空间composer自动加载需要用到命名空间,因此所有的代码库都需要使用命名空间,如果没有,那就改吧!使用命名空间之后你可能会打开新世界的大门。创建composer.json我假设你已经安装了composer,并且已经会使用了。创建自己的包我们首先需要创建一个composer.json,示例文件如下上面的composer.json有一个比较重要的是au

python学习笔记:三、函数

这是第三篇python学习笔记,我们即将要学习python的函数。内容主要包括两个部分,函数的声明和函数的调用。函数声明和调用比如我们要声明一个“吃”的函数,语法如下:def eat(): return "eat something"print(eat())上面是一个没有参数的函数,做的事情很简单,声明一个函数,然后返回一个字符串。接下来要增加一个参数了。def ead(food): return "eat %s" % foodprint(eat('fruit'))可以看到,上面声明了一个带有一个参数的函数,当然可以声明带两个,三个等。这些都是固定的,那么如果要声明一个不固定参数的

Go语言的 make 和 new

new 和 make 是两个内置函数,主要用来创建并分配类型的内存。在我们定义变量的时候,可能会觉得有点迷惑,不知道应该使用哪个函数来声明变量,其实他们的规则很简单,new 只分配内存,make 只能用于 slice、map 和 channel 的初始化。下面我们就来具体介绍一下new在Go语言中,new 函数描述如下:从上面的代码可以看出,new 函数只接受一个参数,这个参数是一个类型,并且返回一个指向该类型内存地址的指针。同时 new 函数会把分配的内存置为零,也就是类型的零值。【示例】使用 new 函数为变量分配内存空间。当然,new 函数不仅仅能够为系统默认的数据类型,分配空间,自定义

计算机语言学习指南

这篇文章讨论基于语言的基本要素,如何快速入门一种计算机语言。是一篇语言从学习到使用的指导手册,并且这种学习方式是一个系统的学习,相比于碎片化的学习,这种学习更加不容易遗忘。语言的基本成分语言的基本成分为数据、运算、控制、传输。想想你学过的语言,是不是都是这样。归结语言的组成成分,学习一门语言可以从这四个方面下手,这四个方面掌握之后,对这个语言就有个最基本的了解了。语言基本成分:数据数据是程序操作的对象。实际上我们可以思考,一个数据拥有的属性有哪些,根据我们已经掌握的语言来说(比如PHP)。$a = 1$a是数据,那么这个数据有哪些属性呢?名称(a),类型(int)。从这一行代码只能发现这两个属

Go入门:五、goroutine和channel

这是我Go学习的第五篇笔记,学习的是go的语言的其他特性,这些特性是其他语言所不具备的。这次主要学习的是goroutine和channel。我的语言学习过程一般分为下面几个:1. 变量和数据类型2. 流程控制方法3. 函数声明和调用4. 面向对象5. 语言特性6. 常用标准库goroutine介绍和使用Go语言中,每个并发执行的单元称为goroutine(可类比线程)。当一个程序启动时候,main函数在一个main goroutine中运行。如果想要创建新的goroutine,使用go关键字!语法创建一个新的 goroutinechannel是goroutine的通信机制,比如创建一个能够接收

序言:我的sublime

多年以前有朋友推荐我用sublime,那大概是2011年的时候吧,我用tango notpad2,曾觉得这是用的最舒服的编辑器,高亮,秒开,太舒服。当我无意中看到好多人在用sublime的时候,我好奇的试一试,这一试,就是几年了,或许我以后也将会一直用下去。开始,相当长的一段时间内仅仅将sublime当做一个编辑器用,我想的是看的舒服,打开快,界面够酷就可以了,而且我用的也确实很舒服。但后来,我觉得要是sublime能够直接f5来运行程序是多方便啊,实际上,这对于sublime就是小case,sublime灵活的配置,快捷键你想怎么定义就怎么定义,只要机器上面安装了编译器或者各种语言的解释器就

赞赏

微信赞赏支付宝赞赏

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注