スポンサーリンク

Given component holder class androidx.activity.ComponentActivity does not implement interface dagger.hilt.internal.GeneratedComponent or interface dagger.hilt.internal.GeneratedComponentManager

スポンサーリンク

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がついていない等基本的なミスの可能性が高いです。

タイトルとURLをコピーしました