[Go语言学习]之一:搭建单元测试环境
最近开始正式的学习Go语言,奉行我学习一项新技术的步骤和原则( 笔记 + 单元测试 + demo )。首先学习了开发环境的配置,并立即搭建了单元测试的环境,这样可以一边写笔记,一边进行测试和学习,从而加强理解。
这里简单介绍Go中的测试环境搭建方法,大家可以参考着搭建并测试学习。
Go中的测试方式
Go语言中自带有一个轻量级的测试框架(testing) 和 go test 命令来实现单元测试、性能测试 和 示例。一般来说,一个 xxx.go 文件对应的 xxx_test.go 文件就是其对应的单元测试文件,往往在同一个目录下(参见 %GOROOT%\src\pkg 下的各文件)。
_test.go中有三种测试方式(具体可以参见 gohelptestfunc ):
1.单元测试, 代码示例为:
func TestXxx(t *testing.T) {
单元测试代码, 通过 t.Error 等实现断言
}
2.性能测试,代码示例为:
func BenchmarkXxx(b *testing.B) {
for i := 0; i < b.N; i++ {
目标代码,会重复运行N次
}
}
3.示例 -- 代码示例为:
func ExampleXxx() {
示例语句,往标准输出中输出信息,然后下面会通过 Output 的注释指明会输出的文字,框架会进行比较
//Output: 示例输出
}
针对本人的学习笔记需要,当前情况下只使用单元测试来记录各种学习笔记。
下面是我针对切片(Slice)的测试代码,从中可以验证文档中说的一些重要信息,比如:可随时动态增减元素,扩充时会重新分配并复制内存(类似于 std::vector) 等。
func TestSlice(t *testing.T) {
//方法1:直接创建一个保存有10个整数的slice
intSlice := make([]int, 10, 15) //{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
for idx := 0; idx < len(intSlice); idx++ {
intSlice[idx] = idx + 1
}
GOUNIT_ASSERT(t, len(intSlice) == 10, "make创建的slice长度")
GOUNIT_ASSERT(t, cap(intSlice) == 15, "make创建的slice容量") //从尾端向数组切片中追加元素
newIntSlice := append(intSlice, 11, 12, 13)
GOUNIT_ASSERT(t, len(intSlice) == 10, "append后原来的Slice不变")
GOUNIT_ASSERT(t, len(newIntSlice) == 13, "append后新的Slice")
GOUNIT_ASSERT(t, cap(newIntSlice) == 15, "cap(newIntSlice) == 15")
GOUNIT_ASSERT(t, &newIntSlice != &intSlice, "append返回新的切片")
GOUNIT_ASSERT(t, &newIntSlice[0] == &intSlice[0], "底层的数组是同一个") newIntSlice[0] = 99
GOUNIT_ASSERT(t, newIntSlice[0] == intSlice[0], "未进行内存扩充的情况下新旧Slice指向同一个底层数组") newAddressIntSlice := append(intSlice, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20)
GOUNIT_ASSERT(t, cap(newAddressIntSlice) == 30, "扩充后的长度,目前实现采用容量翻倍的方式")
newAddressIntSlice[0] = 199
GOUNIT_ASSERT(t, &newAddressIntSlice[0] != &intSlice[0], "进行了内存扩充,底层数组不再一样")
GOUNIT_ASSERT(t, newAddressIntSlice[0] != intSlice[0], "进行了内存扩充,底层数组不再一样") //方法2:先创建一个array,然后基于该array创建slice
intArray := [10]int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
intSliceFromArray := intArray[0:5] //[:]--基于全部元素, [5:]--从第5个元素开始的所有元素
GOUNIT_ASSERT(t, len(intSliceFromArray) == 5, "array[n:m]创建的slice长度")
GOUNIT_ASSERT(t, cap(intSliceFromArray) == 10, "array[n:m]创建的slice容量")
GOUNIT_ASSERT(t, cap(intArray) == 10, "数组的容量") //下面代码会在运行时抛出"index out of range"的异常(panic) -- 因为该slice长度是5(即0~4)
//intSliceFromArray[5] = 10 //在slice后追加slice,注意最后的三个点
S3 := append(newIntSlice, intSliceFromArray...)
GOUNIT_ASSERT(t, len(S3) == 18 && cap(S3) == 30, "在slice后追加slice") //copy函数,如两个切片不一样大,会按照较小的切片的元素个数进行复制
var newS = make([]int, 3)
nCopy := copy(newS, intSlice[0:5])
GOUNIT_ASSERT(t, nCopy == 3, "只复制3个元素")
}
补充说明:
1.GOUNIT_ASSERT 是自定义的函数,封装了 testing.T 的操作,免得写太多的代码;
2.%GOROOT%\src\pkg 目录下已有很多系统提供的单元测试,可以从中学到不少Go语言库的用法。
3.本人目前的LiteIDE中各个测试项的截图,里面已经写了不少笔记,这样的话,本人每次增加了新的笔记和测试代码后,只要简单的按一下快捷键 Ctrl + T 即可:
[Go语言学习]之一:搭建单元测试环境的更多相关文章
- Go语言学习之介绍与环境搭建
Go语言第一课 一.Go语言介绍 1.什么是Go语言? Go 是一个开源的编程语言,它能让构造简单.可靠且高效的软件变得容易. Go是从2007年末由Robert Griesemer, Rob Pik ...
- Docker学习之搭建nginx环境
前言 很久没写随笔了,今天我们来学习一下如何在docker搭建nginx环境吧! 一:下载镜像,使用docker pull拉取最新的nginx镜像 命令:docker pull nginx 查看镜像: ...
- C 语言学习 之搭建环境和熟悉命令
Open Terminal 打开终端To run a command as administrator (user "root"), use "sudo <comm ...
- android学习一---搭建开发环境
android基于Java并运行Linux内核上的轻量级操作系统.由于是基于java的,学习起来也不是太难,对java有一定了解并知道一些基本的图形用户界面,入门就很简单了. 一.了解JDK ,SDK ...
- Linux学习9-CentOS搭建nginx环境
前言 之前我们搭建网站的时候,把war包放到tomcat下就能运行起来了,为什么部署上线的时候,又用到了nginx呢? nginx可以做多台服务器的负载均衡,当用户非常少的时候,可以用一台服务直接部署 ...
- perl学习笔记--搭建开发环境
windows下perl开发环境搭建 perl下载地址:http://www.activestate.com/developer-tools 各个插件的安装方法:(通过代理上网的方法) 方法一:pad ...
- Scala - 快速学习02 - 搭建开发环境
1- 下载与安装 下载链接:http://www.scala-lang.org/download/ CMD To run Scala from the command-line, simply dow ...
- 【c语言学习】1 基础环境安装调试
1-1下载 vs2019 vs2019下载链接https://visualstudio.microsoft.com/zh-hans/vs/community/ 1-2安装配置环境 记得勾选上c++开发 ...
- Maven学习 (一) 搭建Maven环境
有两种方式可以配置maven的环境配置,本人推荐使用第二种,即使用本地的maven安装文件,个人感觉这样可以方便管理下载jar包的存放位置,错误信息的输出等,可以在dos窗口中可以清晰看到,虽然比 ...
随机推荐
- c语言发挥帕斯卡三角
我们已经确定了帕斯卡三角的规则,下面是我的代码,非常实用哦! !! #include<stdio.h> void main() { int i,j,n,k; sca ...
- oracle获取字符串长度函数length()和hengthb()
原文:oracle获取字符串长度函数length()和hengthb() lengthb(string)计算string所占的字节长度:返回字符串的长度,单位是字节 length(string)计算s ...
- CSS3实战开发: 纯CSS实现图片过滤分类显示特效
原文:CSS3实战开发: 纯CSS实现图片过滤分类显示特效 各位网友大家好,今天我要带领大家开发一个纯CSS的图片分类显示的网址导航,单纯看标题大家可能有些困惑,依照以往惯例,我先给大家演示一下实际运 ...
- 使用Oracle 9i工具管理数据库 - 初学者系列 - 学习者系列文章
前面介绍了Oracle 9i的安装,本文大概介绍下Oracle 9i提供的管理工具的使用. 1 打开数据库配置工具 2 下一步 3 下一步 4 下一步.这里输入数据库名和SID 5 下一步 6 下一步 ...
- jquery实现文字上下滚动效果
文字上下滚动是经常用到的js效果,这里介绍一种上下渐隐渐出的文字展现效果! 代码实现很简单,只需要引入jquery就可以. 代码如下: <!DOCTYPE> <head> &l ...
- cocos2d-x的TestCpp分析
最近,我刚开始学coco2d-x 我会写我的学习经验来 首先TestCppproject有许多例子文件夹,而在这些文件夹以外的其他文件 .我首先研究这些文件: controller.h/cpp:管理方 ...
- 使用Excel快速发送大量的电子邮件
使用Excel快速发送大量的电子邮件.两个步骤: 1. 准备发送数据: a.) 打开Excel,新Book1.xlsx b.) 填写以下内容. 第一列:接受者,第二列:邮件标题,第三列:文,第四列:附 ...
- 必须掌握的JavaScript基本知识
作为一个前端工作者,应该了解一些javascript的发展历史,javascript实现及版本等.基本概念包括语法.关键字.变量.数据类型.操作符.语句控制及函数等,它们和我们学习的其它语言C/C++ ...
- 使用winform控件注意线程绘制界面冲突
在用.NET Framework框架的WinForm构建GUI程序界面时,如果要在控件的事件响应函数中改变控件的状态,例如:某个按钮上的文本原先叫“打开”,单击之后按钮上的文本显示“关闭”,初学者往往 ...
- 应用CSS的page-break-after属性 实现WEB页面强制分页打印
虽然dedecms.com向大家介绍了很多CSS属性的相关知识,但有些非常冷门的属性还是有所欠缺.在B/S程序中,对打印页面的控制,CSS相对比较弱,例如: 自动分页, 就基本没啥实际用途.我们通常需 ...