Кинжал 2. Пустой тестовый компонент не разрешен - PullRequest
0 голосов
/ 05 декабря 2018

Я только начал компилировать классы и модули для тестирования пользовательского интерфейса проекта Android.Один использует di, и в моих тестах необходимо ввести некоторые зависимости.Сразу же я столкнулся с некоторыми проблемами при разрешении тестового компонента.Пытаясь упростить проблему, я создал пустой тест и пустой тестовый компонент.Несмотря на это, компонент остается неразрешенным, в то время как та же самая конструкция была успешно разрешена в другом проекте Android.

По моему мнению, использование такого пустого компонента позволяет отключить большинство мест, где ошибка может быть скрыта, за исключением файлов градала.(в любом случае это может быть неправильно).

Вот класс компонентов и тестов:

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

    @Test
    fun test() {

    }
}

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

@Component
interface TestComponent {

}

А вот и приложение gdle:

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: ошибка крайне неинформативна и выглядит следующим образом:

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.

1 Ответ

0 голосов
/ 14 января 2019

Приношу свои извинения тем, кто отправил правильный ответ несколько раз назад.

Ключевые строки, которые будут добавлены в gradle:

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