Go语言test之类方法测试

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

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

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", "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() if b != 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: "", Local: "XMLRsp"}, "1", "1", "1"} r := new(XMLRsp) _ = r.Parse(in) if *r != out { t.Errorf("XMLRsp_Parse failed, result is: [%s]\n", *r) fmt.Printf("Expectation is: [%s]\n", out) } else { fmt.Printf("XMLRsp_Parse result is: [%s]\n", *r) } }

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

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", "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() if b != 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: "", Local: "XMLRsp"}, "1", "1", "1"} r := new(XMLRsp) _ = r.Parse(in) if *r != out { t.Errorf("XMLRsp_Parse failed, result is: [%s]\n", *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之间不能直接比较。

运行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,大功告成,你可以忙着写其他的代码去了^-^

原文发布于微信公众号 - Golang语言社区(Golangweb)

原文发表时间:2016-09-08

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Kiba518

C#线程安全使用(四)

这是时隔多年第四篇,主要是因为身在东软受内网限制,好多文章就只好发到东软内部网站,懒的发到外面,现在一点点把在东软写的文章给转移出来。

9330
来自专栏jessetalks

async & await 的前世今生(Updated)

async 和 await 出现在C# 5.0之后,给并行编程带来了不少的方便,特别是当在MVC中的Action也变成async之后,有点开始什么都是asyn...

351110
来自专栏偏前端工程师的驿站

网页优化系列三:使用压缩后置viewstate

  Asp.net中的服务器控件都启用了viewstate,虽然方便了开发人员,但页面大小及性能上确实有所影响,对于无需viewstate的控件及页面可以直接把...

21650
来自专栏丑胖侠

《Drools7.0.0.Final规则引擎教程》番外实例篇——FactHandler使用案例

背景 在使用具体的业务使用中,我们经常会通代码对Fact对象进行操作,Drools为我们提供了FactHandler来获取对象的句柄,通过此返回值可以对Work...

28050
来自专栏飞扬的花生

C#中返回值封装

      在平时开发过程中常常需要取一个方法的返回值,BOSS写了一个返回值类,做个练习以备不时之需: 返回值支持泛型和非泛型 先贴上代码: 非泛型返回值类:...

273100
来自专栏智能大石头

XCode新增数据转换功能(导数据)

用法: DAL.AddConnStr("xxgk", "Data Source=192.168.1.21;Initial Catalog=信息公开;user i...

22160
来自专栏技术博客

C#函数方法集

1、DateTime 数字型 System.DateTime currentTime=new System.DateTime();

14520
来自专栏Java成神之路

Java微信公众平台开发_06_素材管理

30820
来自专栏草根专栏

使用两种方法让 ASP.NET Core 实现遵循 HATEOAS 结构的 RESTful API

HATEOAS(Hypermedia as the engine of application state)是 REST 架构风格中最复杂的约束,也是构建成熟 ...

589110
来自专栏DOTNET

asp.net web api 版本控制

版本控制 版本控制的方法有很多,这里提供一种将Odata与普通web api版本控制机制统一的方法,但也可以单独控制,整合控制与单独控制主要的不同是:整合控制通...

62360

扫码关注云+社区

领取腾讯云代金券