user10723154
user10723154

Reputation: 21

Dagger 2. Empty test component unresolved

I've just started off compiling classes and modules for UI testing of android project. The one is using di and there is a necessity of injecting some dependencies in my tests. Right away I've faced some troubles resolving my test component. Trying to simplify the issue, I created an empty test and empty test component. Despite this the component stays unresolved while the same construct was successfully resolved inside the other android project.

In my opinion using such empty component allows to cut off the majority of places where the mistake can be hided except for gradle files (anyway it can be wrong).

Here are component and test class:

class LoginTest {
    init {
        try {
            UiThreadStatement.runOnUiThread {
                val testTest: TestComponent = DaggerTestComponent
                    .builder()
                    .build()
            }
        } catch (throwable: Throwable) {
            throwable.printStackTrace()
        }
    }

    @Test
    fun test() {

    }
}

---------------------

@Component
interface TestComponent {

}

And here is an app gradle:

apply plugin: 'com.android.application'
apply plugin: 'kotlin-kapt'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'com.google.gms.google-services'

repositories {
    maven { url 'https://maven.fabric.io/public' }
}

android {
    compileSdkVersion configuration.compileSdkVersion
    buildToolsVersion configuration.buildToolsVersion

    defaultConfig {
        applicationId configuration.package
        minSdkVersion configuration.minSdkVersion
        targetSdkVersion configuration.targetSdkVersion
        versionCode configuration.versionCode
        versionName "${configuration.versionMajor}" +
                ".${configuration.versionMinor}" +
                ".${configuration.versionPatch}"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        vectorDrawables.useSupportLibrary = true
    }

    signingConfigs {
        debug {
            storeFile file("debug.keystore")
        }
        release {
            storePassword KEYSTORE_PASSWORD
            keyAlias KEY_ALIAS
            keyPassword KEY_PASSWORD
        }
    }

    buildTypes {
        debug {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

    flavorDimensions "default"

    productFlavors {
        mock {
            dimension "default"
            minSdkVersion configuration.minSdkVersion
            ext.enableCrashlytics = false
        }
        dev {
            versionNameSuffix "-dev"
            applicationIdSuffix '.dev'
            minSdkVersion configuration.minSdkVersion
            ext.enableCrashlytics = false
        }
        prod {
            dimension "default"
            minSdkVersion configuration.minSdkVersion
        }
    }

    kapt {
        generateStubs = true
    }

    sourceSets {
        main.java.srcDirs += 'src/main/kotlin'
        prod.java.srcDirs += 'src/prod/kotlin'
        dev.java.srcDirs += 'src/dev/kotlin'
        debug.java.srcDirs += 'src/debug/kotlin'
        test.java.srcDirs += 'src/test/kotlin'
        mock.java.srcDirs += 'src/mock/kotlin'
        androidTest.java.srcDirs += 'src/androidTest/kotlin'
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}

dependencies {
    implementation fileTree(include: ['*.jar'], dir: 'libs')

    // Kotlin
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$libraries.kotlin_version"

    // Support
    implementation "com.android.support:appcompat-v7:$libraries.supportVersion"
    implementation "com.android.support:design:$libraries.supportVersion"
    implementation "com.android.support:recyclerview-v7:$libraries.supportVersion"

    // Rx
    implementation "io.reactivex.rxjava2:rxjava:$libraries.rxjava"
    implementation "io.reactivex.rxjava2:rxandroid:$libraries.rxandroid"
    implementation "com.jakewharton.rxbinding2:rxbinding-kotlin:$libraries.rxbinding"
    implementation "com.jakewharton.rxbinding2:rxbinding-design-kotlin:$libraries.rxbinding"
    implementation "com.jakewharton.rxbinding2:rxbinding-recyclerview-v7-kotlin:$libraries.rxbinding"

    // OkHttpVersion
    implementation "com.squareup.okhttp3:okhttp:$libraries.okhttpVersion"
    implementation "com.squareup.okhttp3:logging-interceptor:$libraries.okhttpVersion"

    // Retrofit
    implementation "com.squareup.retrofit2:converter-gson:$libraries.retrofit"
    implementation "com.squareup.retrofit2:retrofit:$libraries.retrofit"
    implementation "com.squareup.retrofit2:adapter-rxjava2:$libraries.retrofit"

    // Dagger
    implementation "com.google.dagger:dagger:$libraries.dagger"
    implementation "com.google.dagger:dagger-android-support:$libraries.dagger"
    kapt "com.google.dagger:dagger-android-processor:$libraries.dagger"
    kapt "com.google.dagger:dagger-compiler:$libraries.dagger_compiler"

    // Junit
    testImplementation "junit:junit:$libraries.junitVersion"

    // Runner
    androidTestImplementation "com.android.support.test:runner:$libraries.testRunner"

    // Espresso
    androidTestImplementation "com.android.support.test.espresso:espresso-core:$libraries.espressoCore"

    // Spoon
    androidTestImplementation 'com.squareup.spoon:spoon-client:1.7.1'
}

UPD: The error is extremely uninformative and looks like:

e: ...\LoginTest.kt: (11, 37): Unresolved reference: DaggerTestComponent
:app:compileMockDebugAndroidTestKotlin FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:compileMockDebugAndroidTestKotlin'.
> Compilation error. See log for more details

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

Upvotes: 1

Views: 212

Answers (1)

user10723154
user10723154

Reputation: 21

My apologize to who posted the right answer a few times ago.

The key strings to be added to gradle:

    kaptAndroidTest "com.google.dagger:dagger-compiler:$libraries.dagger"
    kaptAndroidTest "com.google.dagger:dagger-android-processor:$libraries.dagger"

Upvotes: 1

Related Questions