为什么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语言中如何进行测试相关推荐

  1. C语言中如何输出字符的编码,GB2312中汉字字符的编码在C语言中的输出测试

    C语言中ASCII编码表中每一个字符对应的编码,与数字其实是完全一样的. printf("%d\n",1);          对应的输出是1 printf("%c\n& ...

  2. c语言链表如何做成环,在C语言中单向链表环测试并返回环起始节点的实现方法...

    小编想问大家一个问题,就是如果我们需要进行测试一个单向链表是否存在环,应该使用什么方法才是最好的呢?如果大家还不知道有什么方法的话,那就接着往下面看哟!因为今天小编就要为大家介绍一下:在C语言中单向链 ...

  3. 干货!任务型对话中语言理解的鲁棒性测试 |清华刘劼西

    点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入! 本期AI TIME PhD直播间,我们邀请到了清华大学计算机科学与技术系的硕士生--刘劼西,带来分享--<任务型对话中语言理解的鲁 ...

  4. c语言正则表达式测试数字,C语言中使用正则表达式

    POSIX 规定了正则表达式的C语言库函数, 参见regex(3), 我们已经学了很多C函数得用法  读者应该具备自己看懂man手册得能力 C语言中使用正则表达式一般分为三部: 1.编译正则表达式re ...

  5. 技术图文:C#语言中的泛型 I

    C#语言中的泛型 I 知识结构: 1. 泛型概述 泛型广泛应用于容器(Collections)和对容器操作的方法中. 从 .NET Framework2.0 开始,微软提供了一个新的命名空间Syste ...

  6. linux检查socekt是否断开,如何在C语言中判断socket是否已经断开

    如果不主动关闭socket的话,系统不会自动关闭的,除非当前进程挂掉了,操作系统把占用的socket回收了才会关闭.小编今天跟大家简单介绍下如何在C语言中判断socket是否已经断开 下面来介绍判断非 ...

  7. 在开发流程中嵌入安全测试

    ContinuumSecurity创始人Stephen de Vries,在Velocity Europe 2014大会上提出了持续且可视化的安全测试的观点.Stephen表示,那些在敏捷开发过程中用 ...

  8. c语言中很多中括号由外向里,浅谈C语言中的类型声明

    文章目录 [隐藏] 新年第一更!之前群友问了一个 C语言 问题,即int(*(*p)()).int *(*p)()和int *(*p())的区别在哪里.确实,有时C语言的类型声明是很魔性的,看着也很令 ...

  9. c语言c2182是什么错误,C语言中一种更优雅的异常处理机制

    上一篇文章对C语言中的goto语句进行了较深入的阐述,实际上goto语句是面向过程与面向结构化程序语言中,进行异常处理编程的最原始的支持形式.后来为了更好地.更方便地支持异常处理编程机制,使得程序员在 ...

最新文章

  1. html图标点击转换颜色,PNG格式小图标的CSS任意颜色赋色技术_html/css_WEB-ITnose
  2. 沫沫金【实践可用】--web工程ORM数据库链接(JDBC)链接集群库||普通库,两种标准...
  3. 怎样给oracle表设置序列,Oracle的sequence序列在hibernate中的配置方法
  4. 修改网页代码_网站建设中使用简洁规范代码的重要性
  5. DB2-407 SQLCODE: -407, SQLSTATE: 23502
  6. Open3d之计算源点云与目标云的距离
  7. 在iview + vue项目中使用自定义icon图标
  8. tp5框架原理详解_工程测量教学合集,测量施工方案+原理解读,测量人员有它就够了...
  9. 学习有法,事半功倍 — 在线学习的10个技巧
  10. sql列转行逗号连接_SQL 拼接字符串 列转行 | 学步园
  11. Oracle数据库基础练习(一):Oracle数据库查询操作练习81题
  12. 大学生创业实战 - 代充的套利故事
  13. 高德地图 调用天地图 WMTS 服务
  14. laragon如何开启Mysql数据库访问 - 创建数据库 - 管理
  15. Qt动态图表更新实现
  16. java anymatch_Java Stream anyMatch() API
  17. 康瞳新零售护眼产品新系统 零售商城
  18. IOS开发笔记(九)——IM聊天工具个人详情页面,自定义tableview的accessaryView
  19. 【大学物理学】静电场
  20. C语言double里的deta,蚁群算法(C语言版)

热门文章

  1. Silverlight 2 相关文章汇总
  2. javaScript不是java脚本
  3. RosBE生成ReactOS的VS2015工程失败2
  4. 未处理OleDbException - 找不到可安装的ISAM学习总结
  5. win32汇编定时器简单Demo
  6. PE文件数据结构汇总
  7. 图解Ollydbg简单逆向操作案例
  8. Linux字符驱动开发学习总结
  9. POJ 2356 (抽屉原理)
  10. CentOS 安装Zabbix 手记