Я только начал компилировать классы и модули для тестирования пользовательского интерфейса проекта 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.