Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/192.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
dagger2和kotlin的Android单元测试问题_Android_Unit Testing_Kotlin_Dagger 2 - Fatal编程技术网

dagger2和kotlin的Android单元测试问题

dagger2和kotlin的Android单元测试问题,android,unit-testing,kotlin,dagger-2,Android,Unit Testing,Kotlin,Dagger 2,我正试图在android的测试文件夹中创建dagger组件接口,但在dagger处理完生成的类后,它会显示一个错误:“无法访问TestComponent,它是com.example.anives.di.DaggerTestAppComponent的超类型。请检查您的模块类路径是否缺少依赖项或存在冲突”.你能帮我解决这个问题吗 gradle dependecies: def lifeCycleExtensionVersion = '1.1.1' def supportVersion = '28.0

我正试图在android的测试文件夹中创建dagger组件接口,但在dagger处理完生成的类后,它会显示一个错误:“无法访问TestComponent,它是com.example.anives.di.DaggerTestAppComponent的超类型。请检查您的模块类路径是否缺少依赖项或存在冲突”.你能帮我解决这个问题吗

gradle dependecies:
def lifeCycleExtensionVersion = '1.1.1'
def supportVersion = '28.0.0'
def retrofitVersion = '2.3.0'
def glideVersion = '4.9.0'
def rxJavaVersion = '2.1.1'
def navVersion = '2.1.0-alpha05'
def daggerVersion = '2.14.1'
def mockitoVersion = '2.11.0'

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
    implementation 'androidx.appcompat:appcompat:1.1.0'
    implementation 'androidx.core:core-ktx:1.2.0'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
    implementation "com.android.support:design:$supportVersion"
    implementation "android.arch.lifecycle:extensions:$lifeCycleExtensionVersion"

    implementation "androidx.navigation:navigation-fragment-ktx:$navVersion"
    implementation "androidx.navigation:navigation-ui-ktx:$navVersion"

    implementation "com.squareup.retrofit2:retrofit:$retrofitVersion"
    implementation "com.squareup.retrofit2:converter-gson:$retrofitVersion"
    implementation "com.squareup.retrofit2:adapter-rxjava2:$retrofitVersion"

    implementation "io.reactivex.rxjava2:rxjava:$rxJavaVersion"
    implementation "io.reactivex.rxjava2:rxandroid:$rxJavaVersion"

    implementation "com.github.bumptech.glide:glide:$glideVersion"

    implementation "com.android.support:palette-v7:$supportVersion"


    implementation "com.google.dagger:dagger:$daggerVersion"
    implementation "com.google.dagger:dagger-android-support:$daggerVersion"
    implementation 'androidx.legacy:legacy-support-v4:1.0.0'
    kapt "com.google.dagger:dagger-compiler:$daggerVersion"
    kapt "com.google.dagger:dagger-android-processor:$daggerVersion"


    testImplementation "org.mockito:mockito-inline:$mockitoVersion"
    testImplementation "android.arch.core:core-testing:1.1.1"
    kaptTest "com.google.dagger:dagger-compiler:$daggerVersion"

    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test:runner:1.2.0'
    androidTestImplementation 'androidx.test.ext:junit:1.1.1'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
 }

TestAppComponent:
   package com.example.animals.di

 import com.example.animals.base.BaseTest
 import dagger.Component
 import javax.inject.Singleton

@Singleton
@Component(modules = [])
interface TestAppComponent {
   fun inject(baseTest: BaseTest)
}
基本测试: 包com.example.animals.base

 import android.app.Application
 import com.example.animals.di.DaggerTestAppComponent
 import org.junit.Before
 import org.mockito.Mockito

open class BaseTest {

    val application = Mockito.mock(Application::class.java)

    @Before
     fun setUp() {
     configureDi()

    }

    private fun configureDi() {
       var testAppComponent = DaggerTestAppComponent.builder().build()

        testAppComponent.inject(this)
    }
 }

我在这里设置测试时遇到了同样的问题。 在查看中的示例时,我注意到我们生成的源没有包含在源集中

在项目的某个地方添加gradle脚本应该可以解决您的问题

例:(与Tivi相同)


我也有同样的问题,但有趣的是,它仍然可以编译,而且仍然可以工作,即使它抱怨是的,没错。不管怎样,我现在已经找到了一种使用daggerappcomponent类的不同方法。我没有在测试中创建一个全新的类,而是开始使用在开发过程中已经创建的类,它现在工作得非常好,我觉得后一个是使用dagger类的更好方法。非常感谢David。
main.java.srcDirs += 'src/main/kotlin'
debug.java.srcDirs += 'src/debug/kotlin'
release.java.srcDirs += 'src/release/kotlin'
test.java.srcDirs += 'src/test/kotlin'

// For kapt stubs
main.java.srcDirs += [file("$buildDir/generated/source/kapt/main")]
debug.java.srcDirs += [file("$buildDir/generated/source/kapt/debug")]
release.java.srcDirs += [file("$buildDir/generated/source/kapt/release")]
test.java.srcDirs += [file("$buildDir/generated/source/kapt/test")]

// For kotlin code gen during kapt
main.java.srcDirs += [file("$buildDir/generated/source/kaptKotlin/main")]
debug.java.srcDirs += [file("$buildDir/generated/source/kaptKotlin/debug")]
release.java.srcDirs += [file("$buildDir/generated/source/kaptKotlin/release")]
test.java.srcDirs += [file("$buildDir/generated/source/kaptKotlin/test")]