相互運用性

Compose は一般的なテスト フレームワークと統合できます。

Espresso との相互運用

ハイブリッド アプリでは、ビュー階層内に Compose コンポーネントを配置し、Compose コンポーザブル内にビューを配置できます(AndroidView コンポーザブルを使用)。

どちらのタイプも、マッチングするために特別な手順は必要ありません。ビューをマッチングするには Espresso の onView を使用し、Compose 要素をマッチングするには ComposeTestRule を使用します。

@Test
fun androidViewInteropTest() {
    // Check the initial state of a TextView that depends on a Compose state.
    Espresso.onView(withText("Hello Views")).check(matches(isDisplayed()))
    // Click on the Compose button that changes the state.
    composeTestRule.onNodeWithText("Click here").performClick()
    // Check the new value.
    Espresso.onView(withText("Hello Compose")).check(matches(isDisplayed()))
}

UiAutomator との相互運用

デフォルトでは、使い勝手のよい記述子(表示されるテキストやコンテンツの説明など)によってのみ、UiAutomator からコンポーザブルにアクセスできます。Modifier.testTag を使用する任意のコンポーザブルにアクセスするには、そのコンポーザブルのサブツリーに対してセマンティック プロパティ testTagsAsResourceId を有効にする必要があります。この動作を有効にすると、スクロール可能なコンポーザブル(LazyColumn など)のように、一意のハンドルがないコンポーザブルに役立ちます。

コンポーザブルの階層では、上位で 1 度有効にすれば、Modifier.testTag を持つすべてのネストされたコンポーザブルに UiAutomator からアクセスできるようになります。

Scaffold(
    // Enables for all composables in the hierarchy.
    modifier = Modifier.semantics {
        testTagsAsResourceId = true
    }
){
    // Modifier.testTag is accessible from UiAutomator for composables nested here.
    LazyColumn(
        modifier = Modifier.testTag("myLazyColumn")
    ){
        // Content
    }
}

Modifier.testTag(tag) を持つコンポーザブルは、resourceName と同じ tag を使用して By.res(resourceName) を使用することでアクセスできます。

val device = UiDevice.getInstance(getInstrumentation())

val lazyColumn: UiObject2 = device.findObject(By.res("myLazyColumn"))
// Some interaction with the lazyColumn.

参考情報

  • Android でアプリをテストする: Android のテストのメインランディング ページでは、テストの基礎と手法について幅広い情報を確認できます。
  • テストの基礎: Android アプリのテストに関する基本コンセプトを学びます。
  • ローカルテスト: 一部のテストは、自分のワークステーションでローカルに実行できます。
  • インストルメンテーション テスト: インストルメンテーション テストも実行することをおすすめします。つまり、デバイス上で直接実行されるテストです。
  • 継続的インテグレーション: 継続的インテグレーションを使用すると、テストをデプロイ パイプラインに統合できます。
  • さまざまな画面サイズをテストする: ユーザーが利用できるデバイスは非常に多様であるため、さまざまな画面サイズでテストする必要があります。
  • Espresso: Espresso はビューベースの UI を対象としていますが、Compose テストの一部のアスペクトでも役立ちます。