Go为什么使用测试

本文已被阅读过 Posted by 陌无崖 on 2019-08-19

导语

在对一个大项目进行开发的时候,测试时必不可少的,尤其是在微服务中,测试可以提高我们对代码的信心,在实际开发中,不可能等到将所有的代码部署完成才测试进行,在开发中,我们应该尽可能的预测出程序运行中会出现的各种情况,用模拟数据的方式完成测试。

Hello World

我们编写一个简单的程序

1
2
3
4
5
6
7
8
9
10
11
package main

import "fmt"

func Hello() string {
return "Hello, world"
}

func main() {
fmt.Println(Hello())
}

在这个程序中,可以看到,最简单的测试便是直接在主函数中进行输出,这样对于简单的程序是可行的方案,然而试想如果你的程序很大,在你的主函数中将会引用各种包,来进行测试输出在控制台,到时我们的控制台肯定也是充满了各种日志,用这种方式,将会大大的降低我们的开发时间,实际上在Go中造就为我们提供了一个测试的包,用这个包,我们可以在运行程序前统一的进行测试。如果测试成功便直接部署,不需要在修改我们的任何文件。我们可以测试上面的代码如下:

这里需要注意的是我们的测试文件的命名格式必须为**_test.go。 测试的函数必须是Test命名开头,参数同时也必须是*testing.T,这样Go才会知道这是一个测试函数。

1
2
3
4
5
6
7
8
9
10
11
12
package main

import "testing"

func TestHello(t *testing.T) {
got := Hello()
want := "Hello, world"

if got != want {
t.Errorf("got '%s' want '%s'", got, want)
}
}

那么我们如何进行输出呢?在Go中提供了go test命令行

1
go test hello_test.go


如果我们想要得到更多的信息,我们可以使用以下命令

1
go test -v hello_test.go


除了以上命令,还有其他命令如下:

扩展

在Go中,我们在编写代码之前,经常先编写测试文件,然后用测试结果和真实想要的结果对比来更改我们的程序,这种方式便叫做测试驱动开发

重构测试

假如我们有一个需求希望输出自己想要的结果,如下:

1
2
3
4
5
6
7
8
func TestHello(t *testing.T) {
got := Hello("mowuya")
want := "Hello, mowuya"

if got != want {
t.Errorf("got '%s' want '%s'", got, want)
}
}

按照刚刚的方法此时测试输出结果如下,会明显的看到程序出现了问题,因此我们可以按照这个问题的来源来修改我们的函数

修改之后

1
2
3
func Hello(str string) string {
return "Hello, " + str
}

总结

以上的例子比较简单,主要是了解为什么使用测试,以及测试可以为我们做些什么,在下面的系列文章中,将会逐渐将代码难度加大。

推荐阅读


本文欢迎转载,转载请联系作者,谢谢!


打开微信扫一扫,关注微信公众号