Compose レイアウトをテストする

アプリの UI をテストして、Compose コードの動作が正しいことを確認します。これにより、エラーを早期に検出して、アプリの品質を向上させることができます。

Compose には、要素を検索し、属性を検証して、ユーザー アクションを実行するためのテスト API が用意されています。また、時間操作などの高度な機能も含まれます。これらの API を使用して、アプリの動作を検証する堅牢なテストを作成します。

視聴回数

Compose ではなくビューを使用している場合は、Android でアプリをテストするの一般的な Test apps on Android セクションをご覧ください。

まず、UI テストを自動化するガイドをご覧ください。ビューを使用する場合など、デバイス上で実行されるテストを自動化する方法について説明しています。

主なコンセプト

Compose コードのテストに関する主なコンセプトは次のとおりです。

  • セマンティクス: セマンティクスは UI に意味を与え、テストで 特定の要素を操作できるようにします。
  • テスト API: テスト API を使用すると、要素の検索、 属性の検証、ユーザー アクションの実行を行うことができます。
  • 同期: 同期により、アクションの実行やアサーションの作成の前に、UI がアイドル状態になるまでテストが待機することが保証されます。
  • 相互運用性: 相互運用性により、同じアプリ内の Compose ベースの要素とビューベースの要素の両方でテストを行うことができます。

テスト早見表

Compose でのテストについて学習すべき主なトピックの概要については、テスト早見表をご覧ください。

設定

Compose コードをテストできるようにアプリを設定します。

まず、UI テストを含むモジュールの build.gradle ファイルに次の依存関係を追加します。

// Test rules and transitive dependencies:
androidTestImplementation("androidx.compose.ui:ui-test-junit4:$compose_version")
// Needed for createComposeRule(), but not for createAndroidComposeRule<YourActivity>():
debugImplementation("androidx.compose.ui:ui-test-manifest:$compose_version")

このモジュールには、ComposeTestRule と、Android 用の AndroidComposeTestRule と呼ばれる実装が含まれています。このルールを通じて、Compose コンテンツを設定したり、アクティビティにアクセスしたりできます。ルールはファクトリ関数を使用して作成します。 createComposeRuleを使用するか、アクティビティにアクセスする必要がある場合は createAndroidComposeRuleを使用します。Compose の一般的な UI テストは次のようになります。

// file: app/src/androidTest/java/com/package/MyComposeTest.kt

class MyComposeTest {

    @get:Rule val composeTestRule = createComposeRule()
    // use createAndroidComposeRule<YourActivity>() if you need access to
    // an activity

    @Test
    fun myTest() {
        // Start the app
        composeTestRule.setContent {
            MyAppTheme {
                MainScreen(uiState = fakeUiState, /*...*/)
            }
        }

        composeTestRule.onNodeWithText("Continue").performClick()

        composeTestRule.onNodeWithText("Welcome").assertIsDisplayed()
    }
}

参考情報

  • Android でアプリをテストする: Android テストのメイン ランディング ページで、テストの基礎と手法についてより広範な視点から説明しています。
  • テストの基礎: Android アプリのテストの背景にある基本概念について詳しく学べます。
  • ローカルテスト: 一部のテストは、独自のワークステーションで ローカルに実行できます。
  • インストルメンテーション テスト: インストルメンテーション テストも実行することをおすすめします。つまり、デバイス上で直接実行されるテストです。
  • 継続的インテグレーション: 継続的インテグレーションを使用すると、テストをデプロイ パイプラインに統合できます。
  • さまざまな画面サイズをテストする: ユーザーが利用できるデバイスは多岐にわたるため、さまざまな画面サイズでテストする必要があります。
  • Espresso: ビューベースの UI を対象としていますが、Espresso の知識は Compose テストのいくつかの側面で役立ちます。

Codelab

詳細については、Jetpack Compose テスト Codelab をご覧ください。

サンプル