如何有效提高测试覆盖率

354 天前
 Ainokiseki

reviewer 要求代码测试覆盖率只能高不能低,但是有些部分的代码真的没法单测啊,依赖第三方库并且第三方也没做好 mock ,全用 interface 封装一遍又太麻烦了,好在 reviewer 只看数字,有什么方法拉高单测覆盖率吗

1524 次点击
所在节点    Go 编程语言
10 条回复
jones2000
354 天前
买付费的第 3 方库,签合同, 让第 3 放提供测试报告。这样你只需要写自己代码的测试就可以了。
RedisMasterNode
354 天前
(背景:擅长+喜欢写测试,搞 TDD )

要不你把你的代码形式翻出来大伙儿看看,到底是什么代码单测这么难写?
mtzhjsnv
354 天前
gomonkey 应该适合你
seeu2ex
354 天前
@RedisMasterNode 有些代码的分支测试怎么做,同一份代码写两次吗
RedisMasterNode
354 天前
@seeu2ex 分支不如你举个例子?不同分支比如说上面某个变量得值不同,因此下面走了不同分支,测试代码里面不就是 2 个 case ,然后各自 mock 那个变量到不同得值,就能走到不同分支去了?

按我的经验,测试代码里面执行部分基本不会改动的,改来改去都是测试用例部分,举个自己写的例子:
https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/processor/tailsamplingprocessor/internal/sampling/ottl_test.go

然后也有人说业务代码没法这样简单,那我觉得其实只是本身代码组织得不够合理、每个方法目标不够明确,改改习惯就行。
dayeye2006199
353 天前
为啥 mock 要第三方做?难道不是你 mock 第三方吗?
第三方库的覆盖率也会被算进去?
seeu2ex
353 天前
@RedisMasterNode #5 前端,感觉对过个交互请求导致的网络请求做了结果分支,这样的话岂不是要将前面的交互代码复制一份,再做不同路径值的验证(感觉真正有效的就这部分)
RedisMasterNode
353 天前
@seeu2ex 不对,可以明确你要测试的范围和手段,例如单元测试应该以方法或者精简的极小模块为“单元”,针对这个单元的功能测试,例如一个时间转换方法、一个调用后端+数据处理的方法;端到端测试是给定用户输入,触发前端逻辑->调用后端->调用 xxx->返回给用户,检查返回结果是否匹配。

然后如果你觉得测试的时候需要写大量的重复代码,可以考虑优化测试的框架,这个框架是否帮你封装了逻辑,让你只需要管理输入参数即可?用不同输入参数走到不同分支?可以先把测试框架做扎实再写 case ,说白了,要时间的,不是哪天想搞就能简简单单搞
seeu2ex
353 天前
Ainokiseki
347 天前
不好意思这几天一直没看到新消息提醒,以为没有回复
@dayeye2006199 比如我代码依赖某个第三方包的结构体,那显然是没法 mock 的,因为不是 interface ,除非我把所有第三方结构体都手动封装成 interface

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/998020

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX