iT邦幫忙

第 11 屆 iT 邦幫忙鐵人賽

DAY 7
2
Mobile Development

Android TDD 測試驅動開發系列 第 7

Day07 - 單元測試小結

這一篇我們來小結一下單元測試的重點,下個單元將正式進入Android的測試。

JUnit

  • JUnit是一個用在Java、Kotlin的單元測試框架。

用來驗證被測試物件的方式

  • 驗證回傳值
  • 驗證物件狀態的改變
  • 驗證目標與相依物件的互動

依賴注入

  • 而當我們在測試時,遇到外部相依無法預期結果時,可以透過依賴注入的方式處理。

Injection 的種類

  • Method injection
  • Constructor injection
  • Property injection
  • Ambient context

假物件

  • Stub:用來模擬外部相依物件的回傳結果。
  • Mock:用來驗證目標與相依物件的互動。

我們來看一下好的單元測試應該有哪些要注意的。

單元測試的FIRST原則

Fast:快速

  • 單元測試的執行速度必須要,快才不會打亂你的開發節奏。如果不快,就不會經常地執行它們。

Independent:獨立

  • 測試案例之間相依性為零。每一個測試,都只做跟自已有關的事。
  • 不同測試的先後順序不應有所差異。如果要先跑A測試之後,B測試才能正常通過測試就是不好的測試。
  • 不與外部(包括檔案、資料庫、網路、服務、物件等等)直接相依。當看到紅燈,一定是被測試的方法寫錯,而不是其他原因。例如網路壞、機器問題。
  • 避免Flaky test,因為別人的錯誤而導致測試失敗。

Repeatable:可重複

  • 例如重覆使用被測試物件,就可能造成測試不是每次都有一樣的結果。基本上,如果你有做到Independent的話,測試應該可被重覆執行的。
  • 由團隊裡任何人重複執行測試都應得到一樣的結果。

Self-Validating:自我驗證

  • 從測試結果應能直接了解失敗的原因。你不能在收到測試失敗後,還需要再修改Production Code或Testing Code才能知道錯誤的原因。

Timely:及時

  • 寫測試要及時。最好是使用TDD的方式來開發,先寫Testing Code再寫Production Code。如沒有TDD,最晚也要在commit 之前要寫完測試。

測試不該有條件式判斷

當你的測試如果有條件式判斷,代表你可能會有其中一個條件不會被執行到。

不具備邏輯

測試應該要很簡單,簡單到一出錯,你不用debug,你直接看就知道哪裡錯。測試程式應只是描述一件事,儘量不要有for迴圈等複雜的邏輯。

準備開始Android測試

第一單元「單元測試基本概念」,就到這篇告一個段落。大家應該對於如何寫單元測試有了初步的了解,下一篇開始我們就開始進入到Android的單元測試。


上一篇
Day06 - Mock 框架:Mockito
下一篇
Day08 - 在Android 上的測試
系列文
Android TDD 測試驅動開發30

尚未有邦友留言

立即登入留言