Golang系列之单元测试快速入门
Posted smileNicky
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Golang系列之单元测试快速入门相关的知识,希望对你有一定的参考价值。
Golang系列之单元测试快速入门
1、前言
对写好的代码进行测试和调试,定位问题,是程序开发必须掌握的技能,在java中,我们可以使用junit进行测试,然后在golang里怎么进行单位测试?golang有轻量级的测试框架testing
,也有命令go test sample_test.go
这些命令,具体怎么使用,可以看一下本文简单介绍
2、mian函数里测试
有时候,要测试一个函数是否功能正常,有时候我们会直接写在main函数里,然后通过log
框架或者fmt
直接打印信息,验证,下面给出一个例子
package main
import "fmt"
func main()
res := addUpper(10)
fmt.Printf("返回值res:%v", res)
func add(n1 int , n2 int) int
return n1 + n2
func addUpper(n int) int
res := 0
for i := 0 ; i <= n ; i++
res += i
return res
这种方法对于单个文件,代码量不多,其实也是可以的,但是对于一个庞大的项目,这种方法就显得很麻烦,特别是生产,我们难道为了测试去更改main函数,然后再重启,显然是不合理的。然后所有的测试业务都写在main函数,不利于管理,代码量一多就会变得复杂
3、单位测试入门
testing
是golang里的一个轻量级的测试框架,可以用于单位测试,也可以用于性能测试,程序员可以基于这个框架写相应的单位测试用例,然后通过日志打印等方式进行debug调试,定位排查问题
使用很容易,基于原来的文件,sample.go
,新建一个sample_test.do
的测试文件,注意,必须命名为*_test.do
package main
import (
"testing"
)
func TestAdd(t *testing.T)
res := add(1,2)
if res != 3
t.Fatalf("error res %v" , res)
t.Logf("success res %v" , res)
func TestAddUpper(t *testing.T)
res := addUpper(10)
if res != 55
t.Fatalf("error res %v" , res)
t.Logf("success res %v" , res)
注意:
- 测试用例文件必须以
_test.go
结尾 - 测试用例函数必须以
Test
开头,一般是Test
+被测试的函数名 - 测试函数形式参数必须是
*testing.T
- 出现错误,
t.Fatalf
打印错误日志并退出程序 - 程序正常,
t.Logf
打印格式化的日志 - 测试单个文件,要加上测试的原文件
go test -v sample_test.go sample.go
- 测试单个函数,加上方法名,
go test -v sample_test.go TestAdd
- 运行测试用例命令
- cmd > go test :运行正确不打印日志,错误才会打印日志
- cmd > go test -v :运行错误或成功,都打印日志
在goland里测试,测试失败的情况:
测试成功的情况:
也可以使用命令在cmd里测试,使用go test
,-v
是不管成功失败都会打印日志,不加上只会打印失败的日志,成功的情况不打印
go test -v calculator_test.go calculator.go
以上是关于Golang系列之单元测试快速入门的主要内容,如果未能解决你的问题,请参考以下文章
手撸golang 学etcd 手写raft协议之12 单元测试
golang 快速入门让Golang kafka驱动程序发布到“测试”主题,这些主题是从快速入门指南创建的http://kafka.apache.org/docum