1

I'm trying to run instrumented tests in my Android project using Hilt for dependency injection. However, the test run fails with the following error:

Test run failed to complete. Instrumentation run failed due to Process crashed.
Logcat of last crash: 
Process: com.gallery, PID: 18761
java.lang.RuntimeException: Unable to instantiate instrumentation ComponentInfo{com.gallery.test/dagger.hilt.android.testing.HiltTestRunner}: java.lang.ClassNotFoundException: Didn't find class "dagger.hilt.android.testing.HiltTestRunner" on path: DexPathList[[zip file "/system/framework/android.test.runner.jar", zip file "/system/framework/android.test.mock.jar", zip file "/system/framework/android.test.base.jar", zip file "/data/app/~~s6XmhIRqt63NMI1LBnaY0g==/com.gallery.test-sRJpIaMD8sVXFHv-PQiQ_g==/base.apk", zip file "/data/app/~~FPiZzDuzLJteRj_dpAfMkA==/com.gallery-NCZb0zYy3YCBvlNrIFdhWw==/base.apk"],nativeLibraryDirectories=[/system/lib64, /system/system_ext/lib64]]
    at android.app.ActivityThread.initInstrumentation(ActivityThread.java:7929)
    at android.app.ActivityThread.handleBindApplication(ActivityThread.java:7618)
    at android.app.ActivityThread.-$$Nest$mhandleBindApplication(Unknown Source:0)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2478)
    at android.os.Handler.dispatchMessage(Handler.java:106)
    at android.os.Looper.loopOnce(Looper.java:230)
    at android.os.Looper.loop(Looper.java:319)
    at android.app.ActivityThread.main(ActivityThread.java:8919)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:578)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1103)
Caused by: java.lang.ClassNotFoundException: Didn't find class "dagger.hilt.android.testing.HiltTestRunner" on path: DexPathList[[zip file "/system/framework/android.test.runner.jar", zip file "/system/framework/android.test.mock.jar", zip file "/system/framework/android.test.base.jar", zip file "/data/app/~~s6XmhIRqt63NMI1LBnaY0g==/com.gallery.test-sRJpIaMD8sVXFHv-PQiQ_g==/base.apk", zip file "/data/app/~~FPiZzDuzLJteRj_dpAfMkA==/com.gallery-NCZb0zYy3YCBvlNrIFdhWw==/base.apk"],nativeLibraryDirectories=[/system/lib64, /system/system_ext/lib64]]
    at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:259)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:637)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:573)
    at android.app.ActivityThread.initInstrumentation(ActivityThread.java:7925)
    ... 10 more

Test Runner in build.gradle.kts:

plugins {
    id("com.android.application")
    id("org.jetbrains.kotlin.android")
    id("kotlin-kapt")
    id("com.google.dagger.hilt.android")
    id("com.google.devtools.ksp")
    id("kotlin-parcelize")
}

android {
    namespace = "com.gallery"
    compileSdk = 35

    defaultConfig {
        applicationId = "com.gallery"
        minSdk = 23
        targetSdk = 35
        versionCode = 1
        versionName = "1.0"

//        testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
        testInstrumentationRunner = "dagger.hilt.android.testing.HiltTestRunner"
    }




    buildTypes {
        release {
            isMinifyEnabled = false
            proguardFiles(
                getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro"
            )
        }
    }
    compileOptions {
        sourceCompatibility = JavaVersion.VERSION_11
        targetCompatibility = JavaVersion.VERSION_11
    }
    kotlinOptions {
        jvmTarget = "11"
    }
    buildFeatures {
        viewBinding = true
    }
}

dependencies {

    implementation(libs.androidx.core.ktx)
    implementation(libs.androidx.appcompat)
    implementation(libs.material)
    implementation(libs.androidx.activity)
    implementation(libs.androidx.constraintlayout)

    //Architectural Components
    implementation(libs.lifecycle.viewmodel.ktx)

    //Coroutines
    implementation(libs.kotlinx.coroutines.core)
    implementation(libs.kotlinx.coroutines.android.v173)
    implementation(libs.androidx.lifecycle.runtime.ktx)

    // RecyclerView
    implementation(libs.androidx.recyclerview)

    // SwipeRefreshLayout
    implementation(libs.androidx.swiperefreshlayout)

    // Image Loading
    implementation(libs.glide)


    /*//Moshi
    implementation(libs.converter.moshi)
    implementation(libs.moshi.kotlin)*/

    ksp(libs.squareup.moshi.kotlin.codegen)

    //Hilt
    implementation(libs.hilt.android)
    kapt(libs.hilt.compiler)
    implementation(libs.androidx.hilt.common)


    /*testImplementation(libs.junit)
    androidTestImplementation(libs.androidx.espresso.core)


    implementation(libs.androidx.recyclerview)
    testImplementation(kotlin("test"))


    testImplementation(libs.junit)
    testImplementation(libs.androidx.core.testing)
    androidTestImplementation(libs.androidx.junit)*/

    // Coroutine test utilities
    /*testImplementation(libs.kotlinx.coroutines.test)
    // Mockito for Kotlin
    testImplementation(libs.mockito.kotlin)

    // Turbine for testing StateFlow
    testImplementation(libs.turbine)

    androidTestImplementation(libs.androidx.junit.v115)
    androidTestImplementation(libs.androidx.runner)
    androidTestImplementation(libs.androidx.rules)
    androidTestImplementation(libs.androidx.junit)

    androidTestImplementation("com.google.dagger:hilt-android-testing:2.56.2")
    kaptAndroidTest("com.google.dagger:hilt-android-compiler:2.56.2")*/

    testImplementation(libs.kotlinx.coroutines.test)
    testImplementation(libs.mockk)

    androidTestImplementation(libs.androidx.junit)

    testImplementation(libs.junit)
    androidTestImplementation(libs.androidx.espresso.core)

    testImplementation(libs.androidx.core.testing)

    androidTestImplementation("androidx.test.espresso:espresso-contrib:3.6.1") // For RecyclerViewActions
    androidTestImplementation("androidx.test.espresso:espresso-intents:3.6.1")

    // For instrumentation tests
    androidTestImplementation("com.google.dagger:hilt-android-testing:2.56.2")
    androidTestAnnotationProcessor("com.google.dagger:hilt-compiler:2.56.2")
    kaptAndroidTest("com.google.dagger:hilt-android-compiler:2.56.2")

    // For local unit tests
    testAnnotationProcessor("com.google.dagger:hilt-compiler:2.56.2")

}
kapt {
    correctErrorTypes = true
}

AndroidManifest.xml(androidTest)

<manifest xmlns:android="http://schemas.android.com/apk/res/android">
    <application
        android:name="dagger.hilt.android.testing.HiltTestApplication"
        android:allowBackup="false" />
</manifest>
2
  • 3
    For anybody else with this issue, for me it was because I actually needed to define a CustomTestRunner.kt developer.android.com/training/dependency-injection/… Commented Jul 31 at 12:15
  • @owenasteel Yes, correct i have fixed by defining a CustomTestRunner.kt. Commented Aug 1 at 6:25

0

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.