楼主: a610062656
跳转到指定楼层
上一主题 下一主题
收起左侧

[找工就业] Unit test到底有什么用?

 
全局:
a610062656 发表于 2020-11-27 20:20:14.--
对不起,当时写得时候会想起当时的情绪就不小心用词过重了
其实,通俗的讲,一个项目一般微观架构上都有几个层次,譬如最熟悉的MVC吧,每个unit test就是保证每一层每个service的每个方法都能达到我们期望的behavior,每一层只关注自己内部的逻辑,只有经过充分的测试,我们才有信心保证code的质量,unit test是最基础的吧,但也很重要,项目代码多了,后期维护,单一dependency 的任何小改动都可能影响他的上层,没有保证单元测试和代码覆盖率,谁都不敢打包票说没问题。至于为啥要mock,因为不是端对端测试,也不是集成测试,mock数据只是为了能驱动你自己的测试案例运行,只有你自己的逻辑对了,与外部系统联调测试才能节约时间,你也有足够的信心保证锅不在你这。国内大部分公司不写unit test,因为基本跟src code是1比1,费时间,但从长期来看,unit test能很好保证质量,避免很多破事,以后你就有体会了,作为工程师,首要的就是把自己的工作做好吧,其实也没太多高大上的东西,就是份职业,虽然简单,但做好他也是最基本的职业素养。
回复

使用道具 举报

全局:
TDD了解下?
回复

使用道具 举报

🔗
invisibili 2020-11-29 02:39:30 | 只看该作者
全局:
unit test 也可以作为设计的一部分,明确定义好一个接口的输入和输出,就可以表现为test case,然后实现需要满足这个条件。mock的意义也是这样,假设你依赖的组件是正常的,来独立测试你实现的这部分功能也是不是正常的
回复

使用道具 举报

全局:
比方最简单的一个函数,里面就调用了一个API,有try catch。
. 1point3acres.com
那么起码会有两个ut,一个是assert called success,一个是 asset catch xxx exception。两者都必须有assert no more operation。. .и

那么,以后如果有人改了API调用,或者多了逻辑,ut就能检测到。
如果改了exception类型,ut也能发现。

更细致一些,还会assert exceptional message, 这样后面如果有人手抖改了log(比如全局替换什么的),也能发现。

回复

使用道具 举报

🔗
bazingaa 2020-11-29 03:50:24 | 只看该作者
全局:
这个问题其实指的探讨 不能一杆子打死
回复

使用道具 举报

🔗
qiaobao 2020-11-29 04:04:21 | 只看该作者
全局:
Unit Test要着重测试函数的功能,而不是实现细节。
回复

使用道具 举报

🔗
MrDoggie 2020-11-29 04:23:51 | 只看该作者
全局:
unit test是为了确保你的函数和你预期的行为一致。我作为reviewer,我一般第一个看那人的unit test。unit test能够直白的体现这个函数要如何invoke,预期的input和output是否符合需求,是否能正确handle边际条件。

以题主的filter函数为例,你可能觉得这个函数没有问题,但这只是你觉得。unknown unknown是bug的源泉。也许这个filter对某些特定的值需要特殊处理,也许这个函数的input不一定是valid的。没有unit test可能你在很后面的integration test,甚至在production中才会发现问题,那时候可能已经造成了customer impact,debug也会困难很多。在开发中越早发现bug,debug成本越低,unit test就是成本最低的方法。. From 1point 3acres bbs
.--
至于mock,unit test中你想测试的是自己的逻辑。你并不应该在unit test中测试别人的api,这应该是在integration test里测的。但同时,开发者会想模拟别人的api返回一些特定的值,来看自己的函数会怎么behave。这时候就需要用mock。mock可以生成任意返回值,所以你可以在unit test中测试1/100000000几率出现的edge case,这是你在integration test中做不到的,或者做不起的。

评分

参与人数 1大米 +1 收起 理由
lexine + 1 赞一个

查看全部评分

回复

使用道具 举报

🔗
aaaa2616 2020-11-29 04:28:55 | 只看该作者
全局:
Unit test要确保你的code的任何一个branch,无论什么样的expected的input,无论什么样的environment都能保证你的code能够按照你的预期执行(throw exception也好,log warning也好,catch exception并且move on也好)。有的时候我们写code自己手动跑代码可能不会去(或无法)测试极端情况(RPC不存在,服务器不存在,网断了,filesystem报错,等等……),而写unit test也可以帮助你去测试所有可能的情况,保证你的code不会有不可预测的情况。

至于mock,并不是说我们图省事而去hide这些interface。mock背后的逻辑有二:1,你能控制自己的测试环境(例如mock RPC永远fail);2,我们只关注被测试code的behavior,也就是说test的成功与否只取决于你写的code而不能取决于其他外部因素,否则就是flaky的test,也失去了UNIT test的本意。

一个好的code submission往往会test code多于真正的business logic。写好test code往往也不一定是很容易的事情。

评分

参与人数 1大米 +1 收起 理由
lexine + 1 赞一个

查看全部评分

回复

使用道具 举报

🔗
coronaking2020 2020-11-29 05:12:54 | 只看该作者
全局:
多些test多谢文档就能早日promote
回复

使用道具 举报

🔗
Sezedai 2020-11-29 06:12:28 | 只看该作者
全局:
找几个没unit test的project 跑一跑用一用你就知道了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

>
快速回复 返回顶部 返回列表