文章同步於blog
今天要來講一個在開發階段很重要的概念 - 單元測試
單元測試(Unit Testing),是軟體開發中的一個重要概念
它是軟體測試的一個階段,用於確保程式中的個別「單元」(通常是函數、方法、類別等)能夠按照預期的方式正確運作
單元測試的主要目標是在開發過程中迅速發現和修復程式碼中的錯誤,以確保軟體的品質和穩定性。
舉個例子
假設我今天在撰寫一隻Controller是用於取得學生的成績
那這個Controller中間有一個use case是要計算需要顯示的資料量
那我們就會針對這個最小的單元(顯示的資料量的function)去撰寫單元測試
寫單元測試有幾個好處
有一點需要特別注意就是,不該去依賴使用中的資料庫的資料來做單元測試
有可能會因為資料庫中的資料有所改動而導致不必要的錯誤
因此我們可以使用模擬(Mocking)或偽造(Stubbing)的方式來建立不影響現有環境且獨立的假資料來進行單元測試
根據 Clean Code這本書的描述,整潔的測試應該遵循這五個字母的法則
上面都看不懂沒關係,這個才是最重要的
很多人會說,我沒有時間寫單元測試
但我必須說,這是習慣養成的問題,第一次寫一定比較慢
不過一回生二回熟,寫久了就知道每個框架要怎麼撰寫單元測試
上面說過,寫單元測試有兩個好處就是,及早發現錯誤和確保功能正確性
當api出錯的時候,你總不會想要一個一個慢慢通靈出哪個地方有問題
撰寫單元測試後,可以直接發現哪邊有問題
這邊有一個要點就是,必須盡可能的考慮到所有狀況
當然不可能想到全部的可能性
不過在盡可能的嘗試之後,至少出錯的機率也會大幅將低許多
我只能說,測試真的是一個可以講很多東西的一個章節
我連TDD都沒有說明
要講下去鐵人賽可能要60天了XD
明天要講一下架構面的部分,先從伺服器端渲染(SSR)開始
Clean Code(ch.9)
很多人會說,我沒有時間寫單元測試,可以回嗆他:你就是不寫測試才會沒有時間 XDDDD
還有個好處是可以減少改A壞B的情況,大家都會覺得自己只改個小地方很有自信,但莫非定律告訴我們總是會爆
我認為改A壞B比較跟單元測試沒有關係
這跟設計面或許會更有關聯
如果設計模式是互相依賴的高耦合結構,例如10個完全不同的function依賴同一個底層function,那就很容易有問題
另外,沒寫單元測試我們找到一個比較有吸引力的說詞
CICD對於大部分的人來說是一個很酷炫的東東
幾個步驟就可以部屬上去
但沒有單元測試的CI就跟沒有醬汁炸鳳尾蝦一樣
沒有跑的必要XD