Go   发布时间:2022-04-09  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Go语言 单元测试大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

Go语言提供了完善的单元测试支持,开发人员可以方便的编写测试代码,保证自己代码的质量。在目前的例子中,一般看到都是普通函数的例子。下面我将通过类方法的单元测试例子来展示一下Go语言的魅力。

首先是代码所在的文件xml.go:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
package myxml
import (
"encoding/xml"
)
type XMLRsqstruct{
XMLName xml.Name `xml:"response"`
ResCode String `xml:"res_code"`
Resmessage String `xml:"res_message"`
}
func (r *XMLRsq ) ToString() (String,error) {
b,err := r.ToBytes()
returnString(b),err
}
func (r *XMLRsq ) ToBytes() ([]byte,err := xml.Marshal(r)
iferr != nil {
returnb,err
}
b = append([]byte(xml.Header),b...)
returnb,err
}
func (r *XMLRsq ) Parse(b []bytE) error {
returnxml.Unmarshal(b,r)
}

接着编写单元测试代码,注意单元测试代码应和被测试的代码在同一个包,且应使用Xxx_test.go的规则来命名测试代码所在的文件,例如对上面的代码文件,应将测试文件命名为xml_test.go,包括以下的代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
package myxml
import"fmt"
import"encoding/xml"
import"tesTing"
func test_XMLRsp_ToString(t *tesTing.T) {
in := XMLRsp{xml.Name{Space:"",Local:"XMLRsp"},"1","1"}
out := []byte(xml.Header)
out = append(out,[]byte(`<XMLRsp><res_code>1</res_code><res_message>1</res_message><can_use>1</can_use></XMLRsp>`)...)
r := in
b,_ := r.ToString()
ifb != String(out) {
t.Errorf("XMLRsp_ToString Failed,result is: [%s]\n",b)
fmt.Printf("Expectation is: [%s]\n",out)
}else{
fmt.Printf("XMLRsp_ToString result is: [%s]\n",b)
}
}
func test_XMLRsp_Parse(t *tesTing.T) {
in := []byte(`<XMLRsp><res_code>1</res_code><res_message>1</res_message><can_use>1</can_use></XMLRsp>`)
out := XMLRsp{xml.Name{Space:"","1"}
r :=new(XMLRsp)
_ = r.Parse(in)
if*r != out {
t.Errorf("XMLRsp_Parse Failed,*r)
fmt.Printf("Expectation is: [%s]\n",out)
}else{
fmt.Printf("XMLRsp_Parse result is: [%s]\n",*r)
}
}

测试代码中,函数可以用如下方式命名:test_T_M,其中T为类型名,M为方法名,这样容易区分,但这不是Go语言的强制要求。

具体测试代码里先构造了一个类XMLRsp的对象,然后通过它去调用相应的方法,本质上与其他单元测试代码并无不同。

上面测试代码第15行,先用了一个类型转换String(out)来得到一个String类型的out表示,因为Go语言里slice之间不能直接比较。

XMLRsp类的3个方法中,ToString的执行路径已经覆盖了ToBytes,故未单独编写用例。

运行go test命令,可以得到类似如下的结果:

XMLRsp_ToString result is: [<?xml version="1.0" encoding="UTF-8"?> <XMLRsp><res_code>1</res_code><res_message>1</res_message><can_use>1</can_use></XMLRsp>] XMLRsp_Parse result is: [{{ XMLRsp} 1 1 1}] PASS ok myxml 1.016s

表示这次测试的结果为PASS,大功告成,你可以忙着写其他的代码去了^-^

大佬总结

以上是大佬教程为你收集整理的Go语言 单元测试全部内容,希望文章能够帮你解决Go语言 单元测试所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。