Re: [讨论] Unit test 的撰写请益

楼主: Keyword (关键字)   2022-11-09 07:07:27
大家都选1吗?我觉得二比较好
Google的guideline是Prefer Realism Over Isolation
详见
https://abseil.io/resources/swe-book/html/ch13.html
TotT有关fakes的讨论也提到
Fakes are useful for when you can't use the real implementation in a test
https://testing.googleblog.com/2013/06/testing-on-toilet-fake-your-way-to.html
总之能用real implementation的时候就不要用fake
※ 引述《shane87123 (阳光大肥宅)》之铭言:
: 先说我对 Unit test 的看法:测试单元(可能是 function)的逻辑是否正确
: 好,进入正题
: 小弟最近刚工作,稍微读了一下负责的 project 的程式码后,
: 要开始开发 Unit test。
: 现况是,各个 file (.c) dependency 很重,
: 常常会有一份 code 内其实呼叫了很多别份 code 的 function,
: 举例来说
: A() {
: B();
: C();
: if (check)
: D();
: }
: 族繁不及备载,
: 而我目前设计有两个方向,
: 1.
: 将 B() C() D() 全部 fake ,单纯去测试 A() 的逻辑是否正确
: 这样做感觉上会比较单纯,一个 test case 只去 test A(),
: 而且不需要去 include B() C() D() 的 header,
: 这样一来 build 起来也比较容易,因为 include 那些 header 又会 dependency 到其他档
: 情况会非常复杂
: 缺点是 coverage 比较差,B() C() D()要额外去写 test case
: 2.
: 直接把他们 include 进来,build failed 就 include,直到 build 过为止
: 这样的好处是不用去实作 B() C() D() 的 fake,
: 但就会让整个 unit test 的 dependency 很重
: 个人偏向1.,毕竟 unit test 就是去测试 function 的逻辑性,
: 在其他 function 对测试 function 没有 side effect 的情况下(如不会改变某变量的值?
: 将他们 fake 掉而只是单纯的去 test 该 function 而已
: 但我第一次接触,不太知道何时应该去 fake (或 mock) 一个 function QQ
: 我只是有这两种想法,两个其实天差地远XDD
:
作者: bnd0327 (阿噗噗)   2022-11-09 08:49:00
端看单元如何定义,如果有些类别或函式只是为了服务特定类别或函式,那本质上相当于私有,就可以不用特地mock
作者: CRPKT (crpkt)   2022-11-09 09:42:00
它主要的考量是维护成本,fake 一样是需要维护的
作者: shibin (喜饼)   2022-11-09 09:55:00
https://martinfowler.com/bliki/UnitTest.html这篇也有相关讨论,供大家参考
作者: lovdkkkk (dk)   2022-11-09 10:10:00
有可能估狗的员工素质与程式品质搭上测试适合那句估狗的guideline, 其它公司未必适用
作者: neo5277 (I am an agent of chaos)   2022-11-09 13:40:00
如果都用接口方式用1,再用套件模拟这样就最单纯其他多的再做
作者: CaptainH (Cannon)   2022-11-09 18:40:00
fake 太多跟本反应不出真实情况
作者: s06yji3 (阿南)   2022-11-09 19:24:00
Unit test不需要考虑真实情况,而是该单元的实作有没有问题。
作者: s0914714 (YA)   2022-11-09 23:49:00
反应真实情况 那不就相同code跑ut结果可能不一样
作者: drajan (EasoN)   2022-11-10 06:57:00
用整合测试 integration test来测
作者: arhtur945 (AnthonyBennet)   2022-11-10 12:41:00
Unit test 配合后续的e2e

Links booklink

Contact Us: admin [ a t ] ucptt.com