Unit Testing, Integration Testing and Functional Testing

Aaron
learning note
Published in
Aug 5, 2021

測試金字塔

Unit Testing 單元測試

測試個別module的正確性,測試時會隔離其他部件,避免受到相依性的影響,盡可能確保單一module的正確性。

Unit Testing也是一個程式設計師在每完成一個小功能的時候,就需要順便撰寫的Test,他將會是一個人在開發中執行過最多遍,程式碼覆蓋率也最高的測試。

例如我完成一個排序模組,這個模組的input來自於模組A,產出會交給模組B進一步加工,但是在Unit Testing之下,我應該隔離模組AB。在Python中可以透過一些mock機制,在不實際呼叫AB的情況之下,取代程式內跟AB有相依性的部份,達到隔離效果,進一步確保排序邏輯的正確性。

Integration Testing 整合測試

用以確認不同部件組合在一起時(combine different units),是否還如預期的運作。

例如end to end就是一個標準的整合測試功能,必須先把後端以及相對應的服務架起來,並透過第三方程式去戳API,看看回傳值是否有如預期。此外網路上也有許多整合測試的範例:

  • 在APP端測試登入以及登出功能
  • 登入前後是否interface有做對應的改變
  • 測試資料是否能透過API寫入DB
  • 測試付款存款之後帳戶是否更新

另外integration testing也常被用來檢驗integrated modules,確認為了同一個目的被整合在一起的模塊是否如期發揮功效。

Functional Testing 功能測試

又稱為行為測試(behavioral testing),和integration testing的界線其實很模糊,可以說有點像是super integration test,就是針對產品的各項功能進行驗證,確認是否符合預先期望的商業邏輯或行為

由於functional testing耗時最久,也更難自動化,我們希望他盡可能的少被執行,當執行到這個階段前,基本上也代表前兩個階段都驗證完畢。雖然說分類上沒有絕對,但這個階段的測試通常包含:

  • UI測試
  • 穩定性測試
  • 長時間運行測試

功能測試的主要缺點之一,就是在測試中,存在冗餘和遺漏邏輯錯誤的可能性。

重點整理

補充資料

--

--

Aaron
learning note

Software engineer who is also an algorithm lover.