Jetpack Compose + Hiltでテストしている人に向けて
Jetpack Composeで予めInstrumentation Testを一度実施したことがあって、Hiltを使ったアプリケーションを初めて動かすときにはまりそう。いやしっかり見ろという話ですが・・。
まずJetpack Compose + HiltでInstrumentation Testを実施する方法が詳しいのは下記の記事です。
Writing An Integration Test With Jetpack Compose and Dagger Hilt
This post will show a simple setup for running an integration test between Compose and a ViewModel using Dagger Hilt.
タイトルのエラーの原因
下記のようにHiltと組み合わせない場合は、createComposeRule()でよしなにやってくれますが、Hiltと組み合わせた場合はcreateAndroidComposeRule<YourActivity>()を使用しないとうまく動きません。YourActivityはテストしたいActivity名に置き換えてください。
@get:Rule(order = 2) val composeTestRule = createComposeRule() // val composeTestRule = createAndroidComposeRule<YourActivity>() 正しくはこっち
Hilt関連のエラーで動かない
タイトル以外にも詰まったポイントが依存性が足りていないことだったので、とりあえず私の環境で動くbuild.gradleを記載します。
compose_version = '1.0.5' kotlin_version = '1.5.31' hilt_version = '2.40.5'
//Hilt implementation "com.google.dagger:hilt-android:$hilt_version" kapt "com.google.dagger:hilt-compiler:$hilt_version" kaptTest "com.google.dagger:hilt-android-compiler:$hilt_version" kaptAndroidTest "com.google.dagger:hilt-android-compiler:$hilt_version" testImplementation "com.google.dagger:hilt-android-testing:$hilt_version" androidTestImplementation "com.google.dagger:hilt-android-testing:$hilt_version" //Compose implementation "androidx.compose.ui:ui:$compose_version" implementation "androidx.compose.material:material:$compose_version" implementation "androidx.compose.ui:ui-tooling-preview:$compose_version" implementation 'androidx.activity:activity-compose:1.4.0' implementation "androidx.compose.material:material-icons-extended:$compose_version" implementation "androidx.navigation:navigation-compose:2.5.0-alpha01" implementation "androidx.hilt:hilt-navigation-compose:1.0.0" //Instrumented Tests Dependency androidTestImplementation "androidx.test:core:1.4.0" androidTestImplementation "androidx.test:core-ktx:1.4.0" androidTestImplementation "androidx.test.espresso:espresso-core:3.4.0" androidTestImplementation "androidx.test.ext:junit:1.1.3" androidTestImplementation "androidx.test.ext:junit-ktx:1.1.3" androidTestImplementation "androidx.test.ext:truth:1.4.0" androidTestImplementation "androidx.test:runner:1.4.0" androidTestUtil "androidx.test:orchestrator:1.4.1" //Compose Test Dependency androidTestImplementation "androidx.compose.ui:ui-test-junit4:$compose_version" debugImplementation "androidx.compose.ui:ui-tooling:$compose_version" debugImplementation "androidx.compose.ui:ui-test-manifest:$compose_version"
その他は@AndroidEntryPointや@HiltAndroidTestがついていない等基本的なミスの可能性が高いです。