JetpackCompose

Jetpack Compose UIテストの書き方と実践例

ⓘ本ページはプロモーションが含まれています

もっとスキルを活かしたいエンジニアへ

スポンサードリンク
働き方から選べる

無料で使えて良質な案件の情報収集ができるサービス

エンジニアの世界では、「いつでも動ける状態を作っておけ」とよく言われます。
技術やポートフォリオがあっても、自分に合う案件情報を日常的に見れていないと、いざ動こうと思った時に比較や判断が難しくなってしまいます。
普段から案件情報が集まる環境を作っておくと、良い案件が出た時にすぐ動きやすくなりますよ。
筆者自身も、メガベンチャー勤務時代に年収1,500万円を超えた経験があります。振り返ると、技術だけでなく「どんな案件や働き方があるか」を日頃から見ていたことが、キャリアの選択肢を広げるきっかけになりました。
このブログを読んでくれた方に感謝を込めて、実際に使っている情報収集サービスを紹介します。

フルリモート・週3日・高単価、どんな条件も妥協したくないなら

フリーランスボードに無料会員登録する

利用者10万人以上。業界最大規模45万件の案件。AIマッチ機能や無料の相場情報が人気。

年収800万円以上のキャリアアップ・ハイクラス正社員を視野に入れているなら

Beyond Careerに無料相談する

内定獲得率90%以上。紹介先企業とは役員クラスのコネクションがある安心と信頼できるエージェント。


スポンサードリンク

Jetpack Compose UIテストの基礎と目的

Jetpack ComposeのUIテストは、UIの動作検証や品質向上において不可欠です。特に、Composeで構築された動的なUIを安定的に維持するためには、自動テストによる早期バグ検出が効果的です。本記事では、Jetpack Compose UI テスト 書き方の具体的手順と実践例をステップバイステップで解説し、中級~上級エンジニア向けに実装方法を丁寧に紹介します。


createComposeRule()の使い方と初期設定

Jetpack Compose UIテストでは、createComposeRule() を使ってテスト環境を構築するのが基本です。このメソッドは、UIのレンダリングやイベント処理をシミュレートするためのルールを生成し、テストケースの実行を可能にします。

テストクラスの基本構造

ローカルテストではJUnit4が一般的ですが、JUnit5を使用する場合も対応可能です。以下にそれぞれの記述例を示します。

JUnit4での使用例

JUnit5での使用例

JUnit5では、@RegisterExtensionを使用してルールを登録します。

注意点createComposeRule()はJUnit4以降で動作します。JUnit5での使用は@RegisterExtensionが必要です。


UI要素の検出と属性検証手法

UIテストでは、画面内に存在するコンポーネントを正確に特定し、表示内容や状態を検証することが求められます。

セレクタの正しい記述方法

Composeではsemantics()onNode()を使って要素を選択します。キーワードやテキスト、ロールなどに基づいて特定可能です。

例: テキストでセレクト

例: 要素のロールによる選択

補足:セレクターが複数該当する場合、useUnmergedTree = trueを指定して正確に操作対象を絞り込むと良いです。

テキスト・状態のアサート例

UI要素の表示内容や可視性を検証する際には、assertTextEquals()assertIsDisplayed()が有効です。

検証項目 使用メソッド
テキスト一致 assertTextEquals() .assertTextEquals("確認する")
可視性確認 assertIsDisplayed() .assertIsDisplayed()
非表示確認 assertDoesNotExist() .assertDoesNotExist()

ユーザー操作のシミュレーション技法

UIテストでは、ユーザーが行うクリックや入力動作をシミュレートして、UIが予期通りに反応するかを検証します。

クリックイベントの実装

ボタンタップなどのインタラクションはperformClick()で再現可能です。

入力フィールドへの値設定

テキスト入力欄や選択肢の変更は以下のように処理できます。

補足:セレクターが複数該当する場合、useUnmergedTree = trueを指定して正確に操作対象を絞り込むと良いです。


ViewModelとの連携テスト戦略

UIとViewModelが密接に関与する場合、テストではStateFlowやLiveDataの変化を監視し、状態遷移を確実に検証する必要があります。

StateFlowの検証パターン

ViewModelから発行されたStateFlowは、テスト中に直接観測できます。

手順

  1. テスト用ViewModelを生成し、UIコンポーザブルと結合。
  2. collect { ... }で値を取得し、期待値と比較。

副作用のテストアプローチ

非同期操作(例: API呼び出し)の検証には、runBlockingTest()などを用いて、状態変化を待機します。

ローカルテスト vs インストゥルメントテストの選定基準

UIテストにはローカルテスト(非インストゥルメント)インストゥルメントテストの2つのタイプがあります。目的に応じて使い分けることが重要です。

テストタイプ比較表


品牌適合性と公式ドキュメントへのリンク

Jetpack ComposeのUIテストは、ブランド適合性を重視した開発が求められます。以下に参考となる公式ドキュメントのリンクを示します。

強調ポイント:ブランド適合性は、UIテストだけでなくデザインやロジックの一貫性にも影響します。公式ドキュメントを定期的に参照し、ベストプラクティスに沿った実装を行いましょう。


まとめ

本記事では、Jetpack Compose UIテストの手順とベストプラクティスを解説しました。具体的には以下の点を取り上げました:

  • createComposeRule()の導入方法と初期設定(JUnit4/JUnit5両方の例)
  • UI要素の検出とアサートの実装例(詳細なコード付き)
  • ユーザー操作(クリック/入力)のシミュレーション技法
  • ViewModelとの連携テスト戦略(StateFlow/LiveDataの監視と非同期処理の検証)
  • ローカル・インストゥルメントテストの違いと選定基準

テストコードをプロジェクトに即座に適用することで、品質向上と開発効率化が実現可能です。記事で解説した内容を参考に、実際のプロジェクトで導入してください。


スポンサードリンク

もっとスキルを活かしたいエンジニアへ

スポンサードリンク
働き方から選べる

無料で使えて良質な案件の情報収集ができるサービス

エンジニアの世界では、「いつでも動ける状態を作っておけ」とよく言われます。
技術やポートフォリオがあっても、自分に合う案件情報を日常的に見れていないと、いざ動こうと思った時に比較や判断が難しくなってしまいます。
普段から案件情報が集まる環境を作っておくと、良い案件が出た時にすぐ動きやすくなりますよ。
筆者自身も、メガベンチャー勤務時代に年収1,500万円を超えた経験があります。振り返ると、技術だけでなく「どんな案件や働き方があるか」を日頃から見ていたことが、キャリアの選択肢を広げるきっかけになりました。
このブログを読んでくれた方に感謝を込めて、実際に使っている情報収集サービスを紹介します。

フルリモート・週3日・高単価、どんな条件も妥協したくないなら

フリーランスボードに無料会員登録する

利用者10万人以上。業界最大規模45万件の案件。AIマッチ機能や無料の相場情報が人気。

年収800万円以上のキャリアアップ・ハイクラス正社員を視野に入れているなら

Beyond Careerに無料相談する

内定獲得率90%以上。紹介先企業とは役員クラスのコネクションがある安心と信頼できるエージェント。


-JetpackCompose