針對「過度指定」的發問,這一個觀念在寫單元測試時相當重要。我的說明在原討論串下面的回覆。
大家如果曾經在產品廣泛地使用「嚴格的 mock assertion」,就會知道隨便改一個產品代碼無關緊要的實作細節,都會導致 20~30 個測試紅燈有多惱人。
如果寫出一堆過度指定的測試,超級敏感的 mock 驗證,你寫得很爽很辛苦、驗證地很完整,未來接手的任何一個人(包含你自己),到時只會想砍了這一堆極度敏感的測試。
#單元測試
#過度指定
▍想了解更多?
來吧,最深入的單元測試培訓內容,最貼近實務 legacy code 優雅地加入單元測試的技巧,都在 https://dotblogs.com.tw/…/201905-unit-testing-effectively-w…
▍課程特色
我不會教你那種 1+2=3 的測試,而是 legacy code 相依於亂數/時間/OTP/靜態相依/DB/網路相依/父類相依 這種超級棘手的依賴,怎麼優雅、無痛、影響程度最低的加入單元測試。
一堆 closure/callback/event/lambda 該怎麼測試,該測什麼?來上課可以節省你很多摸石過河的時間。
另外,課上也會教你如何把測試案例重構地就像描述情境一樣,而不是一大堆攤開的測試代碼。
讓看你測試代碼的人,只會看到他需要看到的東西,語意意圖清楚。
[發問] 大家好,想再請問看不太懂的地方
ch4 有一段「過度指定(overspecification)是指過度指定在測試中應該要發生事情的行為,而這些事情事實上對測試來說無關緊要。」
哪些事對測試來說是無關緊要?沒有例子有點難想像...
從前後文看起來,如果測試裡要求被測試程式一定要 call A()、B()、C(),好像會過於干涉被測試程式的實作,這是過度指定嗎?
Search