測試內容供應器

如果您要實作內容供應器來儲存及擷取資料,或 讓其他應用程式存取資料。建議您測試供應商,確保 無法產生出乎意料的行為本課程說明如何公開測試 也適用於您設為不公開的 開發自己的應用程式

為內容供應器建立整合測試

內容供應器可讓您存取實際的使用者資料,因此請務必確保 在獨立的測試環境中測試內容供應器這個 可讓您只針對 測試案例這也意味著您的測試不會修改實際的使用者資料。適用對象 舉例來說,應避免編寫失敗的測試,因為有資料剩餘 來取代先前的測試同樣地,測試也應避免新增或刪除 供應商的實際聯絡資訊

如要單獨測試內容供應器,請使用 ProviderTestCase2 類別此類別可讓您使用 Android 模擬物件類別,例如 IsolatedContextMockContentResolver:存取檔案並 而不影響實際使用者資料。

整合測試應以 JUnit 4 測試類別編寫。瞭解詳情 如要瞭解如何建立 JUnit 4 測試類別及使用 JUnit 4 斷言,請參閱「建立 本機單元測試類別

如要為內容供應器建立整合測試,您必須執行 步驟:

  1. 將測試類別建立為 ProviderTestCase2 的子類別。
  2. 指定 AndroidX Test 提供的 AndroidJUnitRunner 類別 做為預設測試執行器
  3. ApplicationProvider 類別設定 Context 物件。詳情請參閱 程式碼片段範例。

Kotlin


@Throws(Exception::class)
override fun setUp() {
  super.setUp()
  context = ApplicationProvider.getApplicationContext<Context>()
}

Java


@Override
protected void setUp() throws Exception {
  super.setUp();
  setContext(ApplicationProvider.getApplicationContext());
}

ProviderTestCase2 的運作方式

使用 ProviderTestCase2 的子類別測試提供者。此基礎類別 擴充 AndroidTestCase,因此可提供 JUnit 測試架構 以及測試應用程式權限的 Android 專用方法。最常出現 這個類別的重要功能是初始化功能, 隔離的測試環境

初始化

初始化作業是在 ProviderTestCase2 的建構函式中完成, 而子類別則會在各自的建構函式中呼叫ProviderTestCase2 建構函式建立 IsolatedContext 物件,允許檔案和 但會在與 Android 系統的其他互動中虛設常式。 檔案和資料庫作業本身發生在 且帶有特殊的前置字元。

建構函式接著會建立 MockContentResolver 做為解析器 進行測試。

最後,建構函式會建立受測試的供應器執行個體。這是 一般 ContentProvider 物件,但會使用其所有環境 擷取 IsolatedContext 資訊,因此只有 隔離的測試環境系統會執行測試案例類別中的所有測試項目 對抗這個獨立物件

您對內容供應器執行整合測試的方式與檢測設備相同 單元測試

要測試哪些項目?

以下是關於測試內容供應器的一些具體準則。

  • 使用解析器方法測試:即使你可以為提供者執行個體化 物體 在 ProviderTestCase2 中,您應一律使用 相關的 URI這麼做可確保您針對供應商測試 這種互動方式與一般應用程式所用的互動相同
  • 以合約形式測試公開供應商:您想將供應商視為合約 提供給其他應用程式的公開使用,那麼您應該在合約中進行測試。 以下列舉幾個範例:
    • 使用提供者公開公開的常數進行測試。舉例來說 。 這些常數一律是由供應器公開定義的常數。
    • 請測試供應器提供的所有 URI。供應商可能會提供 分別參照資料的不同面向。
    • 測試無效的 URI。您的單元測試應刻意呼叫 檢查內容是否有誤良好的供應商設計是擲回 IllegalArgumentException 代表無效 URI。
  • 測試標準供應商互動情形:大多數供應商都提供六個存取權 方法:query()insert()delete()update()getType()onCreate()。您的測試應確認所有這些方法都能正常運作。
  • 測試商業邏輯:如果內容供應器導入商業邏輯, 你 並進行測試商業邏輯包括處理無效值、財務或 對重複項目進行算術計算、刪除或合併。