Re: [討論] Unit test 的撰寫請益
大家都選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
:
--
端看單元如何定義,如果有些類別或函式只是為了服務特定
類別或函式,那本質上相當於私有,就可以不用特地mock
它主要的考量是維護成本,fake 一樣是需要維護的
這篇也有相關討論,供大家參考
有可能估狗的員工素質與程式品質搭上測試適合那句估狗的
guideline, 其它公司未必適用
確實,其他公司大概沒有Google的monorepo還有CI infra?
※ 編輯: Keyword (75.172.24.41 美國), 11/09/2022 11:10:30如果 e2e 測出問題後能被快速定位就適合,而能快速定位
有很多可能,可能是工程師很會找問題,或錯誤訊息很清楚
或者有很完善的 log 追踪規劃等等
亦即這個 guideline 有效 多半也是搭配其它多個面向的條
件或其它 guideline,整體湊齊之後有效
如果都用介面方式用1,再用套件模擬這樣就最單純其他多的
再做
fake 太多跟本反應不出真實情況
Unit test不需要考慮真實情況,而是該單元的實作有沒有
問題。
反應真實情況 那不就相同code跑ut結果可能不一樣
用整合測試 integration test來測
Unit test 配合後續的e2e
33
先說結論,先都不要寫。 Legacy system 要先補大範圍的 integration test,確定整體的行為是對的。 如果 code 沒有要再改,不用補細部 unit tests。 原因是因為,原本 API 可能因為設計不良,導致無法寫 unit test 得先 refactor 才有辦法讓它變成 testable,這情況就要先 refactor 再補 UT13
先說在前面 雖然聽起來很幹話,但很多東西沒有標準答案 有時是合適度的問題,也可能是喜好(品味?)的問題 同一個題目,實際的 code 長得不一樣,可能也會用不同的方法處理 另外,除了資源豐富到人力充沛到不行的專案,以及幾乎沒有時程壓力16
首Po先說我對 Unit test 的看法:測試單元(可能是 function)的邏輯是否正確 好,進入正題 小弟最近剛工作,稍微讀了一下負責的 project 的程式碼後, 要開始開發 Unit test。 現況是,各個 file (.c) dependency 很重,
爆
[外絮] 勇士老闆:花大錢買冠軍的說法真是笑話Warriors Owner Claps Back at ‘Ridiculous’ Narrative After the Warriors overcame a woeful shooting effort to win Game 5, ESPN’s Br ian Windhorst called it a “checkbook win.” And there are fans, pundits and T witter trolls out there who are chiding Golden State for buying their latest c爆
[心得] 關於陽明未來的一些看法討論大家好,我是Kuma,偶爾客串回文,分享你的人生。 開始之前,先聽首歌吧! 不知不覺海運的價格好像慢慢墊高又下來了。 電子股漲勢回籠爆
[外絮] 咖哩:確實想在KD走後再次奪冠;嘴綠:咖哩:確實想在KD走後再次奪冠;嘴綠:咖哩肯定想證明KD走錯了 “For sure. You bookend it,” Curry told Yahoo Sports when asked if he wanted to do it without his former teammate. “That’s part of it. But nobody in October thought we’d be here. Now we are. With this group. Not compared to any group be fore it, so it’s pretty dope.”爆
[花邊] Zaza: 把Dillon說是髒球員是不公平的來源: NBC Sports推特 網址: Zaza doesn’t think it’s fair to label Dillon Brooks as a dirty player Zaza不認為把狄龍稱為是個骯髒球員是公平的。 影片:爆
[外絮] 講奢侈稅 勇士老板Lacob: 好東西要花錢的來源:NBC Sports 網址: Lacob addresses looming luxury-tax bill, 'Last Dance' talk Lacob講奢侈稅 Warriors CEO Joe Lacob has stated in the past that the team can't continue to爆
[情報] Berrettini也確診COVID退賽了9分鐘前 Tini在IG宣布他也確診COVID且有流感症狀,只好退賽了 I am heartbroken to announce that I need to withdraw from @wimbledon due to a positive COVID-19 test result. I have had flu symptoms and been isolating the last few days. DespiteX
Re: [新聞] 黑心快篩燒不停!吳秀梅上火線 拿廠商申ACON FDA的EUA文件: 沒有提製造地點 ACON Lab 自己網站的FAQ:X
[問卦] 學妹不寫unit test要怎麼辦?如題 明明說好一人負責一部分 結果她寫完 居然沒有寫unit test !! 這是在戲弄肥宅嗎?