学堂 学堂 学堂公众号手机端

Go语言的单元测试方法是什么

lewis 1年前 (2024-03-26) 阅读数 6 #技术

本篇内容主要讲解“Go语言的单元测试方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Go语言的单元测试方法是什么”吧!

Go语言似乎是个偏执狂,牺牲了不必要的灵活性,带来一些强制的编程风格和约定。比如:

无任何形式的Makefile,模块就是目录、包就是目录、编译配制就是目录!


不光目录被用上了,文件名还能指定用途。文件名后缀为_test.go的都是单元测试文件,_linux32.go就是32位linux特定的代码。

不光文件名被用上了,函数名还有特定用途。在单元测试文件中,测试函数以Test开头。以大写字母开头的变量、类型和函数是外部可见的,小写字母开头的变量、类型和函数是外部不可见的。

类似的约定也不好说是go语言首创,在一些文件格式中也有类似规范。但是我暂时不知道到有什么其它编程语言对编程风格这么带强制性。

对于单元测试,假设有如下calc.go文件:

packagecalc

funcAdd(a,bint)int{
returna+b
}

funcMax(a,bint)(retint){
ret=a
ifb>a{
ret=b
}
return
}

funcMin(a,bint)(retint){
ret=a
ifb<a{
ret=b
}
return
}

有如下测试代码calc_test.go:

packagecalc

import(
"testing"
)
typecalcTeststruct{
a,b,retint
}

varaddTests=[]calcTest{
calcTest{4,6,10},
calcTest{5,6,11},
calcTest{8,-10,-2},
}

funcTestAdd(t*testing.T){
for_,v:=rangeaddTests{
ret:=Add(v.a,v.b)
ifret!=v.ret{
t.Errorf("%dadd%d,want%d,butget%d",v.a,v.b,v.ret,ret)
}
}

}

funcTestMax(t*testing.T){
a,b:=100,300
ret:=Max(a,b)
ifret!=b{
t.Errorf("%disbiggerthan%d",b,a)
}
}

funcTestMin(t*testing.T){
a,b:=100,300
ret:=Min(a,b)
ifret!=a{
t.Errorf("%dissmallerthan%d",a,b)
}
}

执行go test 得到如下结果:

PASS
ok_/home/liangdi/Desktop/test/go/testing0.008
在calc.go中设计一个逻辑错误,把funcMin(a,bint)retint改为:
funcMin(a,bint)(retint){
ret=a
//逻辑错误
ifb>a{
ret=b
}
return
}

执行go test的结果为:

---FAIL:TestMin(0.00seconds)
calc_test.go:38:100issmallerthan300
FAIL
exitstatus1
FAIL_/home/liangdi/Desktop/test/go/testing0.005s

到此,相信大家对“Go语言的单元测试方法是什么”有了更深的了解,不妨来实际操作一番吧!

版权声明

本文仅代表作者观点,不代表博信信息网立场。

热门