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

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

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

回視聴

Compose ではなくビューを使用する場合は、一般的な Android でアプリをテストするをご覧ください。

特に、UI テストを自動化するガイドをご覧になることをおすすめします。ここでは、ビューを使用する場合を含め、デバイス上で実行されるテストを自動化する方法を紹介します。

主な概念

Compose コードをテストする際の重要なコンセプトは次のとおりです。

  • セマンティクス: Compose テストは、セマンティクスを使用して UI を操作します。セマンティクスは UI の一部に意味を与えるもので、UI 階層とともに生成されます。
  • テスト API: Compose には、要素の検出、状態とプロパティに対するアサーションの作成、ユーザー操作をシミュレートするアクションの実行のためのテスト API が用意されています。
  • 同期: デフォルトでは、Compose テストは UI と自動的に同期し、アイドル状態になるのを待ってからアサーションやアクションを実行します。
  • 相互運用性: ハイブリッド アプリでは、テストは Compose と View ベースの要素の両方とシームレスにやり取りでき、他のテスト フレームワークと統合できます。

テスト早見表

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 と、AndroidComposeTestRule という Android の実装が含まれています。このルールを使用して、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: Espresso の知識はビューベースの UI を対象としていますが、Compose テストの一部では Espresso の知識が役立ちます。

Codelab

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

サンプル