专栏首页Golang语言社区Go语言test之类方法测试

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)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

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

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Golang语言--【基础知识】访问数据库

    对许多Web应用程序而言,数据库都是其核心所在. 数据库几乎可以用来存储你想查询和修改的任何信息,比如用户信息、产品目录或者新闻列表等。 Go没有内置的驱动支持...

    李海彬
  • 行为树behavior3go介绍

    在游戏开发中,以状态切换来驱动其执行流程的系统,引入行为树可以大大简化编码和配置。

    李海彬
  • Golang语言--布尔型和数值类型

    布尔类型 布尔类型是 bool。Go语言提供了内置的布尔值true和flase。Go语言支持标准的逻辑和比较操作。这些操作的结果都是布尔值。 布尔值和表达式可以...

    李海彬
  • DP的优化总结

    饶文津
  • windows环境下 php 将office文件(word/excel/ppt)转化为pdf(转)

    2.使用office提供的服务 (注:这在windows服务器上,并且服务器上面安装了版本比较高的office)

    lin_zone
  • ssl证书的加密等级是多少位呢?

      ssl证书128位和256位加密等级之间,很多人都误以为256位的ssl证书要比128位的ssl证书更安全,实际上ssl证书与加密的等级强度是无关的,具体能...

    合信ssl证书
  • HTML5音频audio详解

    直到现在,仍然不存在一项旨在网页上播放音频的标准。 目前,大多数音频是通过插件(比如 Flash)来播放的。然而,并非所有...

    业余草
  • Tungsten Fabric与K8s集成指南丨创建虚拟网络

    在做好架构部署,并确认Tungsten Fabric和Kubernetes(K8s)集群的初始状态没有问题后,就可以开始尝试创建虚拟网络了。

    Tungsten Fabric
  • 树状结构存储与读取之Modified Preorder Tree

    一直以来存储树状结构都采用经典的结构<id,pid>的组合,即每一个节点持有其父节点的ID,并由此构成完整的树状结构。但是这样的结构在遇到大量的查询时会成为严重...

    眯眯眼的猫头鹰
  • Linux命令(22)——touch命令

    touch命令用于修改文件或者目录的时间属性,包括访问时间、状态更改时间和内容修改时间。默认情况,若文件不存在,系统会建立一个新的文件。

    Dabelv

扫码关注云+社区

领取腾讯云代金券