最近开始正式的学习Go语言,奉行我学习一项新技术的步骤和原则( 笔记 + 单元测试 + demo )。首先学习了开发环境的配置,并立即搭建了单元测试的环境,这样可以一边写笔记,一边进行测试和学习,从而加强理解。
这里简单介绍Go中的测试环境搭建方法,大家可以参考着搭建并测试学习。
Go中的测试方式
Go语言中自带有一个轻量级的测试框架(testing) 和 go test 命令来实现单元测试、性能测试 和 示例。一般来说,一个 xxx.go 文件对应的 xxx_test.go 文件就是其对应的单元测试文件,往往在同一个目录下(参见 %GOROOT%\src\pkg 下的各文件)。
_test.go中有三种测试方式(具体可以参见 go help testfunc ):
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) { //从尾端向数组切片中追加元素 newIntSlice[0] = 99 newAddressIntSlice := append(intSlice, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20) //方法2:先创建一个array,然后基于该array创建slice //下面代码会在运行时抛出"index out of range"的异常(panic) -- 因为该slice长度是5(即0~4) //在slice后追加slice,注意最后的三个点 //copy函数,如两个切片不一样大,会按照较小的切片的元素个数进行复制 |