測試內容供應器

如果您實作內容供應器來儲存及擷取資料,或是將資料提供給其他應用程式存取,則應測試供應器,確保該供應器不會以非預期的方式運作。本課程將說明如何測試公開內容供應器,並適用於您自有應用程式設為私人的供應商。

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

內容供應器可讓您存取實際的使用者資料,因此請務必在獨立的測試環境中測試內容供應器。這個方法可讓您只針對測試案例中明確設定的資料依附元件執行。這也代表您的測試不會修改實際的使用者資料。例如,您應避免編寫失敗的測試,因為先前的測試中留有資料。同樣地,測試應避免新增或刪除供應商的實際聯絡資訊。

如要單獨測試內容供應器,請使用 ProviderTestCase2 類別。這個類別可讓您使用 IsolatedContextMockContentResolver 等 Android 模擬物件類別存取檔案和資料庫資訊,而不會影響實際的使用者資料。

您的整合測試應以 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,每個 URI 都會參照資料不同面向。
    • 測試無效的 URI。單元測試應謹慎以無效 URI 呼叫供應器,並尋找錯誤。理想的提供者設計是針對無效 URI 擲回 IllegalArgumentException
  • 測試標準提供者互動功能:大多數供應商都會提供六種存取方法:query()insert()delete()update()getType()onCreate()。測試應確認這些方法是否都能正常運作。
  • 測試商業邏輯:如果內容供應器會實作商業邏輯,則應進行測試。商業邏輯包括處理無效值、財務或算術、排除或合併重複值。