2015-08-08 29 views
2

我正在學習Android(和一般)的單元測試。什麼樣的單元測試 - 簡單驗證類

實踐中,我構建了一個簡單的輸入驗證器類,用於檢查電子郵件和密碼輸入的有效性。

它有2種方法:

  • isEmailValid(字符串email) - 檢查該郵件不爲空,不是空的,是一個有效的電子郵件。
  • isPasswordValid(字符串密碼) - 檢查密碼是否不爲空或空

所以我想創建以下測試:

  • 電子郵件= 「」 - 返回
  • email = null - 返回false
  • email =「aaa」 - return false
  • 電子郵件= 「[email protected]」 - 返回真正
  • 密碼= 「」 - 返回
  • 密碼= NULL - 返回
  • 密碼= 「通行證」 - 迴歸true

我說得對嗎?或者這是「測試矯枉過正」?

+0

我完成了這個非常簡單的項目,並將其上傳到github:https://github.com/dors/simple-android-validator-unit-test – dors

回答

2

我會說這不是矯枉過正。這取決於它們如何在JUnit代碼中編寫以及代碼是如何編寫的。每個測試都會檢查不同的邏輯路徑,並且以用戶爲中心的Android,這些場景對於檢查是非常重要的,因爲用戶會做出令人驚訝的事情。

例如,每個測試只應該做一個單獨的斷言通常是確保它正在測試單個單元的良好實踐。 您是否測試了代碼的錯誤處理部分?和任何可能的分支?

也可以看看使用ECLEmma來檢查您的代碼覆蓋率,以檢查它是否足夠覆蓋代碼並提供度量標準。這似乎只適用於使用標準啓動程序的JUnit,它取決於您使用的是什麼環境,以及如果您只是在沒有android代碼的情況下進行JUnit測試。從使用Roboelectric的評論中,可以找到here代碼覆蓋的替代方法和教程。

您可能還想看看如何使用Robotium執行系統級別(用戶界面)測試,其中可以測試用戶交互。

我也會說讀一般的單元測試。測試應該是孤立的,使用Mock對象將會有所幫助,並且會改善代碼中的依賴注入。例子是JMockitMockito。這些將使您在使用例如SQLite進行測試時更輕鬆。啓用單元測試以專注於測試單個類將改善依賴注入和整體設計。

測試還應該將乾淨的代碼標準作爲您的應用程序代碼保存下來,以供將來用戶理解。

+0

感謝您的詳細解答!這個簡單的項目國際海事組織不需要模擬。另外,我使用RobolectricTestRunner,以便我能夠使用類似TextUtils的類從我的junit測試 – dors

+0

@dors沒問題。我添加了代碼覆蓋率和Roboelectric的鏈接。 – Matt