最新要闻
- 全球视讯!特斯拉叫停与比亚迪合作?比亚迪回应:不实信息
- 环球即时:苹果人事巨震:11位高管扎堆离职 库克也要降薪40%
- 微头条丨燃油车 真凉透了吗
- 【天天时快讯】采用全新NT架构:新Windows端QQ首个版本将于24日发布
- 世界资讯:剧版打破多项纪录!爱奇艺考虑拍《狂飙》电影版 网友评论两级分化
- 天天快资讯:免费玩没戏 《暗黑4》不会加入微软XGP:四五百块还是要花的
- 首位华裔奥斯卡影后!杨紫琼84岁母亲喜极而泣 为女儿感到自豪
- 多举措提高职教吸引力 助力职业教育“强起来”“活起来”
- 焦点简讯:曝苹果最快2024年商用MicroLED屏:比OLED更香
- 今日快讯:7月1日普及!我国将全面淘汰传统后视镜 都换汽车电子后视镜:上游供应链已准备好
- 全球今日报丨老人捡钱不愿归还 女孩崩溃下跪引网友愤怒:律师称可起诉 专家喊话不能仗着年龄大
- 环球新动态:适合买二手的硬件只有4个:学会省1000元
- 当前通讯!“自杀式”降价杀红眼:燃油车真凉透了?
- 乘客出地铁黄鹤楼站的统一姿势:集体反站拍摄绝美夜景
- 天天动态:大爷充29万做美容反悔起诉退钱:宣称能打通“任督二脉”等
- 世界聚焦:硅谷银行破产:在营销号那儿 咋又成美国赢了?
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
焦点资讯:GO语言学习笔记-测试篇 Study for Go ! Chapter ten- Test
持续更新 Go 语言学习进度中 ......
- GO语言学习笔记-类型篇 Study for Go! Chapter one - Type - slowlydance2me - 博客园 (cnblogs.com)
- GO语言学习笔记-表达式篇 Study for Go ! Chapter two - Expression - slowlydance2me - 博客园 (cnblogs.com)
- GO语言学习笔记-函数篇 Study for Go ! Chapter three - Function - slowlydance2me - 博客园 (cnblogs.com)
Study for Go ! Chapter ten- Test
1. 单元测试 ( unit test )
单元测试 ( unit test )除用来测试逻辑算法是否符合预期外,还承担着监控代码质量的责任。任何时候都可以用简单的命令来验证全部功能,找出未完成任务 ( 验收 ) 和任何因修改而造成的错误。它与性能测试、代码覆盖率等一起保证了代码总是在可控范围内,这远比形式化的人工检查要有用得多
单元测试并非要取代人工代码审查 ( code review ),实际上它也无法切入到代码实现层面。但可通过测试结果为审查提供筛选数据,避免因繁琐导致代码审查沦为形式主义。单元测试可自动化进行,能持之以恒。但测试毕竟只是手段,而非目的,所以如何合理安排测试就需要开发人员因地制宜
(资料图片)
可以将测试、版本管理工具、以及自动发布 (nightly build)整合。编写脚本将测试失败结果与代码提交日志相匹配,最终生成报告发往指定邮箱
很多人认为单元测试代码不好写,不知道怎么测试。如果非技术原因,那么需要考虑结构设计是否合理,因为可测试性也是代码质量的一个体现
写单元测试本身就是对即将要实现的算法做复核预演。因为无论什么算法都需要给如条件,返回预期结果。这些加上平时写在 main 里面的临时代码,本就是一个完整的单元测试用例,无非换个地方存放而已
Testing
工具链和标准库自带单元测试框架,这让测试工作变得相对容易。关于测试,有以下规则:
测试代码须放在当前包以“ _test.go ” 结尾的文件中
测试函数以 Test 为名称前缀
测试命令 ( go test )忽略以 “ _ ” 或 “ . ” 开头的测试文件
正常编译操作 ( go build/install )会忽略测试文件
标准库 testing 提供了专用类型 T 来控制测试结果和行为
使用 Parallel 可有效利用多核并行优势,缩短测试时间
对于测试是否应该和目标放在同一目录,一直有不同的看法。某些人认为应该另建一个专门的包用来存放单元测试,且只测试目标公开接口。好处是,当目标内部发生变化时,无须同步维护测试代码。每个人对于测试都有不同的理解,就像覆盖率是否要做到 90% 以上,也是见仁见智
Table driven
单元测试代码一样要写的简介优雅,要做到这一点并不容易。好在多数时候,我们可以用一种类似数据表的模式来批量输入条件并依次比对结果
这种方式将测试数据和测试逻辑分离,更便于维护。另外,使用 Error 是为了让整个表全部完成测试,以便知道具体是哪组条件出了问题。
Test main
某些时候,须为测试用例提供初始化和清理操作,但 testing 并没有 setup / teardown 机制。解决办法是自定义一个名为 TestMain 的函数,go test 会改为执行该函数,而不再是具体的测试用例
M.Run 会调用具体的测试用例,但麻烦的是不能为每一个测试文件写一个 TestMain
要实现用例组合套件 ( suite ),需借助 MainStart 自行构建 M 对象。通过与命令行参数相配合,即可实现不同测试组合
Example
例代码最大的用途不是测试,而是导入到 GoDoc 等工具生成的帮助文档中。它通过比对输出 ( stdout )结果和内部 output 注释是否一致来判断是否成功
如果没有 output 注释,函数就不会被执行。另外,不能使用内置函数 print/println 因为它们输出到 stderr
2. 性能测试
性能测试函数以 Benchmark 为名称前缀,同样保存在 “ *_test.go ” 文件里
测试工具默认不会执行性能测试,须使用 bench 参数。它通过逐步调整 B.N 值反复执行测试函数,知道获得准确的测量结果
如果仅希望进行性能测试,可以用 run = NONE 忽略所有单元测试用例
某些耗时的目标,默认循环次数过少,取平均值不足以准确计量性能。可使用 benchtime 设定最小测试时间来增加循环次数,以便返回更准确的结果
Timer
如果在测试函数中要执行一些额外操作,那么应该临时阻止计时器工作
Memory
性能测试关心的不仅仅是执行时间,还包括在堆上的内存分配,因为内存分配和垃圾回收的相关操作也应该计入消耗成本
也可以将测试函数设置为总是输出内存分配信息,无论使用 benchmem 参数与否
3. 代码覆盖率
如果说单元测试和性能测试关注代码质量,那么代码覆盖率 ( code coverage)就是度量测试自身完整和有效性的一种手段
通过覆盖率值,我们可以分析出测试代码的编写质量。检测它是否提供了足够的测试条例,是否执行了足够的函数、语句、分支、和代码行等,依次来量化测试本身,让白盒测试真正起到应有的质量保障作用。
当然,这并不是说要追求形式上的数字百分比。关键还是为改进测试提供一个可发现缺陷的机会,毕竟只有测试本身的质量得到保障,才能让它免于成为形式主义摆设
代码覆盖率也常用来发现死代码 ( dead code )
为获取更详细的信息,可指定 covermode 和 coverprofile 参数
set :是否执行
count: 执行次数
atomic:执行次数 (支持并发模式)
还可以在浏览器中查看包括具体的执行次数等信息
4. 性能监控
引发性能问题的原因无外乎执行时间过长,内存占用过多,以及意外阻塞。通过捕获或监控相关执行状态数据,就可定位引发问题的原因,从而有针对性改进算法
有两种捕获方式:首先,在测试时输出并保存相关数据,进行初级评估。其次,在运行阶段通过 Web 接口获得实时数据,分析一段时间内的健康情况。除此之外,我们还可以用自定义计数器 ( expvar )提供更多与逻辑相关的参考数据
关键词:
-
焦点资讯:GO语言学习笔记-测试篇 Study for Go ! Chapter ten- Test
持续更新Go语言学习进度中 GO语言学习笔记-类型篇StudyforGo!Chapterone-Type-slowlydance2me-博客园(cnblogs
来源: -
要闻速递:面试官:怎么删除 HashMap 中的重复元素?第 3 种实现思路,99% 的人不会!
背景大家好,我是栈长。前些天,栈长给大家分享了3篇实用的文章:带了一个3年的开发,不会循环删除List...
来源: 焦点资讯:GO语言学习笔记-测试篇 Study for Go ! Chapter ten- Test
要闻速递:面试官:怎么删除 HashMap 中的重复元素?第 3 种实现思路,99% 的人不会!
世界快消息!k8s的Helm 工具安装
RPC框架JMH测试-chatgpt自动生成
前端设计模式——代理模式
全球视讯!特斯拉叫停与比亚迪合作?比亚迪回应:不实信息
环球即时:苹果人事巨震:11位高管扎堆离职 库克也要降薪40%
微头条丨燃油车 真凉透了吗
【天天时快讯】采用全新NT架构:新Windows端QQ首个版本将于24日发布
世界资讯:剧版打破多项纪录!爱奇艺考虑拍《狂飙》电影版 网友评论两级分化
每日看点!插件化开发详解
关注:读Java性能权威指南(第2版)笔记16_垃圾回收C
全球滚动:京东小程序CI工具实践
巧妙使用SQL Server的计算列实现项目唯一规则快速定制
天天快资讯:免费玩没戏 《暗黑4》不会加入微软XGP:四五百块还是要花的
首位华裔奥斯卡影后!杨紫琼84岁母亲喜极而泣 为女儿感到自豪
世界微资讯!Redis内存碎片深入分析
多举措提高职教吸引力 助力职业教育“强起来”“活起来”
焦点简讯:曝苹果最快2024年商用MicroLED屏:比OLED更香
今日快讯:7月1日普及!我国将全面淘汰传统后视镜 都换汽车电子后视镜:上游供应链已准备好
全球今日报丨老人捡钱不愿归还 女孩崩溃下跪引网友愤怒:律师称可起诉 专家喊话不能仗着年龄大
环球新动态:适合买二手的硬件只有4个:学会省1000元
K8S-Helm
资讯:04-数据类型
环球动态:在Linux中安装containerd作为kubernetes的容器运行时
当前通讯!“自杀式”降价杀红眼:燃油车真凉透了?
乘客出地铁黄鹤楼站的统一姿势:集体反站拍摄绝美夜景
天天动态:大爷充29万做美容反悔起诉退钱:宣称能打通“任督二脉”等
世界聚焦:硅谷银行破产:在营销号那儿 咋又成美国赢了?
从大厂离职后 游戏程序员们过得咋样?
鲍美瑶男朋友大白_鲍美瑶
即时看!第129篇:JS模块化开发
每日快播:Yus框架之nl子级管控指令
鼻炎患者要注意了!今年花粉高峰期来得猛又早:将持续数月
中消协等倡议推广小份菜、半份菜:鼓励线上点餐推出“菜量自动提醒”功能
焦点速读:《流浪地球2》上映51天票房破40亿 豆瓣评分又涨了!导演自曝第三部
AMD技术岗最高头衔!DX10/11发明人、皓龙处理器之父等升任企业院士
22-23(2)第2次线上赛
【打怪升级】【rocketMq】rocket的持久化
Linux进程与线程的基本概念及区别
天天消息!k8s单节点改为高可用和更新证书
世界滚动:这还是中国乒乓球吗?王牌选手接连倒下,对手赢球后开心改签机票
欧盟约法三章:苹果无法对iPhone 15 USB-C加密来限制充电速度
每日快报!董明珠称很烦吹捧她的员工:不敢讲真话 没法信任
环球滚动:高尔夫球“名场面”或消失!剧版《最后生还者2》将修改原作剧情
马来西亚原装进口:猫山王榴莲雪糕4.9元/支四折发车
焦点讯息:联想YOGA Pro系列升级:新机全系标配32GB内存+1TB存储
环球今亮点!清华博士回应送外卖:不是炒作 曾创业欠下了百万元债务
环球今热点:299元 雷神X3电竞路由器上架:512MB内存 可253台设备同时连
即时看!比亚迪又拿大单:英国公司订购5000辆元Plus EV 价格比国内贵了一倍
全球热点!最强消费级PCIe 5.0 SSD有多强!技嘉大雕510K 2TB评测:顺序读写破10GB/s、4K超100MB/s
全球速讯:使用symbolicatecrash工具符号化Crash日志
环球速看:开心档之HTML 属性
全球热门:博雅互动(00434.HK)将于3月23日举行董事会会议以审批全年业绩
世界消息!官方:着力解决自媒体内容失真问题、清除违规吸粉
董明珠称批评人很快乐:帮助对方成长
不受支持的PC强行升级Win11 烦人的水印又回来了 微软回应
快看:PPT既视感!电视剧《狂飙》更换新片头:曾被指抄袭网飞纪录片
天天最资讯丨哈佛大学研究:体力劳动更多的男性生育能力更强
当前热点-网站https 问题记录
出道即封神的ChatGPT,现在怎么样了?
IntelliJ IDEA使用教程——不使用maven管理下导入jar包
每日精选:使用Docker搭建MinIO集群服务
CommonsBeanUtils1反序列化分析
全球快资讯:董明珠:如果员工经常在我面前拍马屁 我就开除他
当前关注:网店因商品拆封拒绝七天无理由退货:最终被罚4万元
焦点!全村停电 男子用比亚迪DM-i给自家全屋供电 邻居:为啥就他家有电?
丫丫伙食新添胡萝卜:但它没碰
天天快讯:剧版《最后生还者》顺利收官:M站评分达84分
CommonsCollections4反序列化分析
环球视讯!前端开发爬虫首选puppeteer
聚焦:subtotal函数的作用_SUBTOTAL函数的用法
环球观天下!中国移动涨停 市值2.1万亿创历史新高 挑战A股第一贵州茅台
今日聚焦!亲肤0刺激 润本婴儿驱蚊喷雾大瓶9.9(超市39.9)
天天视讯!高蛋白低脂美味!舌里减脂鸡胸肉5袋到手12.9元
头条焦点:净利润翻倍 宁德时代在补什么课?
最新资讯:卖事故车被判退一赔三!车主:特斯拉让我赔代步车50万租金
环球消息!【数字化运营】PagerDuty平台与上海道宁帮助您的数字基础设施中自动化、编排和加速响应
LocalDateTime应用比较日期
玩家不用担心 分析师称微软收购动视暴雪只会伤害索尼
全球观焦点:游客吐槽25元看海洋馆就几个鱼缸:现场和家里客厅一样大
环球百事通!樱桃推出KW 9200 MINI超薄键盘:剪刀脚按键、三模连接
全球快资讯丨雅阁车主第一次坐比亚迪汉 自侃像是土包子进城 信仰崩塌
焦点讯息:美国公示丫丫回国相关申请:快回家了!
全球观速讯丨二进制安全——缓冲区溢出
每日看点!数组指针&一维数组&二维数组ve
【环球时快讯】面试官:如何在千万级数据中查询 10W 的数据,都有什么方案?
网络安全(中职组)-B模块:压缩包破解
全球快资讯:Rancher 管理 Kubernetes 集群
李想:L7、L8、L9是世界上最安全的车 副驾坐的是我老婆
天天快报!美版《西游记》定档!阵容强大:奥斯卡影后杨紫琼饰观音、吴彦祖演美猴王
日本原装进口!雀巢金牌速溶黑咖啡大促 28.9元到手
Android 14不再允许“杀后台”!一键加速App别装了
上汽投资成立股权投资合伙企业 出资额5亿
环球快资讯丨解惑:教你在 Arch Linux 终端上更改 WiFi 密码
教程|在矩池云使用 Stable Diffusion web UI v1.5 模型和 ControlNet 插件
【环球新要闻】应聘软件测试 HR 会问到哪些问题?收藏这一篇就够了!
Nebius Welcome Round (Div. 1 + Div. 2)
环球快讯:火山引擎 DataTester:一个 A/B 测试,将一款游戏的核心收益提升了 8%
环球最资讯丨华擎Intel显卡集体降价 最多20%:RTX 3060瞬间不香了