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,大功告成,你可以忙着写其他的代码去了^-^
- JS魔法堂:判断节点位置关系
- bash/shell编程学习(3)
- Tomcat配置Web程序几种方式
- java并发编程学习: 守护线程(Daemon Thread)
- HTML条件注释判断浏览器及检验
- HttpClient(二)HttpClient使用Ip代理与处理连接超时
- JavaScript中匿名函数的困惑
- 基础野:细说有符号整数
- Ubuntu14.04下如何开启Mysql远程访问
- docker学习(7) docker-compose使用示例
- docker学习(3) 容器的启动过程
- 基础野:细说原码、反码和补码
- JavaScript循环读书笔记
- docker学习(2) mac中docker-machine使用vmware fusion以及配置国内镜像加速
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Android沉浸式状态栏的实现代码
- MyBatis源码解析之基础模块—DataSource
- Android中Activity和Fragment传递数据的两种方式
- Android MTU 值修改的实例详解
- Android ListView填充数据的方法
- AFURLSessionManager 上传下载使用代码说明
- Android APP之WebView校验SSL证书的方法
- Android中okhttp3使用详解
- Android中RecyclerView实现Item添加和删除的代码示例
- 小程序图片上传,存储,获取,显示(含源码)
- Android网络请求框架Retrofit详解
- Android控件RadioButton实现多选一功能
- 解决Android使用Handler造成内存泄露问题
- Android中imageView图片放大缩小及旋转功能示例代码
- Android 中 ThreadLocal使用示例