Go语言中如何进行测试
为什么80%的码农都做不了架构师?>>>
主要讲解在Go语言中如何进行代码测试
1、调试和测试
在程序开发中应该更多的注重测试而不是调试,即测试的优先级重于调试
2、传统测试与表格驱动测试
传统测试在大多数情况下使用代码进行的单元测试,示例代码如下:
传统测试的缺点:
- 测试数据与测试逻辑耦合在一起
- 出错信息不准确
- 一旦一个数据出错测试全部结束
表格驱动测试 就是在传统测试的基础上 对测试数据与测试逻辑相分离,数据像表格一样单独存储,示例如下:
在Go语言中一般采用表格驱动测试,其优点主要有:
- 分离测试数据与测试逻辑
- 拥有明确的错误信息
- 可以部分失败
- Go语言的语法使我们更容易实现表格驱动测试
3、在Go语言中实现表格驱动测试
注意事项:测试Go文件命名为:xxx_test.go,在测试Go文件中,测试方法使用大写Test开头,测试方法传入参数为:*testing.T
现在示例对勾股数方法进行表格驱动的单元测试 以及性能测试 ,代码如下:
package mainimport (
"testing""math"
)
//传入两个 int 类型数据 a、b,返回 返回 a²+b²
func Triangle(a, b int) int {var c intc = int(math.Sqrt(float64(a*a + b*b)))return c
}//定义测试方法对上面的 方法进行测试
func TestTriangle(t *testing.T) {tests := []struct{ a, b, c int }{{3, 4, 5},{5, 12, 13},{8, 15, 17},{12, 35, 36},{30000, 40000, 5000},}for _, tt := range tests {if actual := Triangle(tt.a, tt.b); actual != tt.c {t.Errorf("Triangle(%d, %d); 实际结果: %d; 期望结果: %d",tt.a, tt.b, actual, tt.c)}}//输出结果://=== RUN TestTriangle//--- FAIL: TestTriangle (0.00s)// 21_Test1_test.go:25: Triangle(12, 35); 实际结果: 37; 期望结果: 36// 21_Test1_test.go:25: Triangle(30000, 40000); 实际结果: 50000; 期望结果: 5000//FAIL
}//对方法进行性能测试
func BenchmarkTriangle(b *testing.B) {for i:=0;i<b.N;i++ {if actual := Triangle(3,4); actual != 5 {b.Errorf("Triangle(%d, %d); 实际结果: %d; 期望结果: %d",3, 4, actual, 5)}}//输出结果(在短时间内执行了 2000000000 次 测试,每次耗时 0.42 ns)://goos: windows//goarch: amd64//2000000000 0.42 ns/op//PASS}
Goland 编译器会 自动识别到 TestTriangle、BenchmarkTriangle 方法为测试方法,可以使其直接执行,针对性能测试,我们可以使用Go提供的 Go tool 工具查看是什么操作占用了过多性能。
转载于:https://my.oschina.net/ruoli/blog/1816384
Go语言中如何进行测试相关推荐
- C语言中如何输出字符的编码,GB2312中汉字字符的编码在C语言中的输出测试
C语言中ASCII编码表中每一个字符对应的编码,与数字其实是完全一样的. printf("%d\n",1); 对应的输出是1 printf("%c\n& ...
- c语言链表如何做成环,在C语言中单向链表环测试并返回环起始节点的实现方法...
小编想问大家一个问题,就是如果我们需要进行测试一个单向链表是否存在环,应该使用什么方法才是最好的呢?如果大家还不知道有什么方法的话,那就接着往下面看哟!因为今天小编就要为大家介绍一下:在C语言中单向链 ...
- 干货!任务型对话中语言理解的鲁棒性测试
|清华刘劼西
点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入! 本期AI TIME PhD直播间,我们邀请到了清华大学计算机科学与技术系的硕士生--刘劼西,带来分享--<任务型对话中语言理解的鲁 ...
- c语言正则表达式测试数字,C语言中使用正则表达式
POSIX 规定了正则表达式的C语言库函数, 参见regex(3), 我们已经学了很多C函数得用法 读者应该具备自己看懂man手册得能力 C语言中使用正则表达式一般分为三部: 1.编译正则表达式re ...
- 技术图文:C#语言中的泛型 I
C#语言中的泛型 I 知识结构: 1. 泛型概述 泛型广泛应用于容器(Collections)和对容器操作的方法中. 从 .NET Framework2.0 开始,微软提供了一个新的命名空间Syste ...
- linux检查socekt是否断开,如何在C语言中判断socket是否已经断开
如果不主动关闭socket的话,系统不会自动关闭的,除非当前进程挂掉了,操作系统把占用的socket回收了才会关闭.小编今天跟大家简单介绍下如何在C语言中判断socket是否已经断开 下面来介绍判断非 ...
- 在开发流程中嵌入安全测试
ContinuumSecurity创始人Stephen de Vries,在Velocity Europe 2014大会上提出了持续且可视化的安全测试的观点.Stephen表示,那些在敏捷开发过程中用 ...
- c语言中很多中括号由外向里,浅谈C语言中的类型声明
文章目录 [隐藏] 新年第一更!之前群友问了一个 C语言 问题,即int(*(*p)()).int *(*p)()和int *(*p())的区别在哪里.确实,有时C语言的类型声明是很魔性的,看着也很令 ...
- c语言c2182是什么错误,C语言中一种更优雅的异常处理机制
上一篇文章对C语言中的goto语句进行了较深入的阐述,实际上goto语句是面向过程与面向结构化程序语言中,进行异常处理编程的最原始的支持形式.后来为了更好地.更方便地支持异常处理编程机制,使得程序员在 ...
最新文章
- html图标点击转换颜色,PNG格式小图标的CSS任意颜色赋色技术_html/css_WEB-ITnose
- 沫沫金【实践可用】--web工程ORM数据库链接(JDBC)链接集群库||普通库,两种标准...
- 怎样给oracle表设置序列,Oracle的sequence序列在hibernate中的配置方法
- 修改网页代码_网站建设中使用简洁规范代码的重要性
- DB2-407 SQLCODE: -407, SQLSTATE: 23502
- Open3d之计算源点云与目标云的距离
- 在iview + vue项目中使用自定义icon图标
- tp5框架原理详解_工程测量教学合集,测量施工方案+原理解读,测量人员有它就够了...
- 学习有法,事半功倍 — 在线学习的10个技巧
- sql列转行逗号连接_SQL 拼接字符串 列转行 | 学步园
- Oracle数据库基础练习(一):Oracle数据库查询操作练习81题
- 大学生创业实战 - 代充的套利故事
- 高德地图 调用天地图 WMTS 服务
- laragon如何开启Mysql数据库访问 - 创建数据库 - 管理
- Qt动态图表更新实现
- java anymatch_Java Stream anyMatch() API
- 康瞳新零售护眼产品新系统 零售商城
- IOS开发笔记(九)——IM聊天工具个人详情页面,自定义tableview的accessaryView
- 【大学物理学】静电场
- C语言double里的deta,蚁群算法(C语言版)