我有一个Kotlin Espresso Dagger2小项目。当我使用Kotlin 1.0.2时效果很好。迁移到Kotlin 1.0.3后,当运行Espresso仪器测试(在MainActivityTest上)时,它出错了。
我的Dagger2 TestModule如下
@Module
open class ApplicationTestModule(protected val mApplication: Application) {
@Provides
internal fun provideApplication(): Application {
return mApplication
}
@Provides
@Singleton
internal fun provideInjectedData(): InjectedData {
return mock(InjectedData::class.java)
}
}
为InjectedData生成的dagger2 ApplicationTestModule如下所示
package com.elyeproj.kotlinespressomock;
import dagger.internal.Factory;
import dagger.internal.Preconditions;
import javax.annotation.Generated;
@Generated(
value = "dagger.internal.codegen.ComponentProcessor",
comments = "https://google.github.io/dagger"
)
public final class ApplicationTestModule_ProvideInjectedData$app_compileDebugKotlinFactory
implements Factory<InjectedData> {
private final ApplicationTestModule module;
public ApplicationTestModule_ProvideInjectedData$app_compileDebugKotlinFactory(
ApplicationTestModule module) {
assert module != null;
this.module = module;
}
@Override
public InjectedData get() {
return Preconditions.checkNotNull(
module.provideInjectedData$app_compileDebugKotlin(),
"Cannot return null from a non-@Nullable @Provides method");
}
public static Factory<InjectedData> create(ApplicationTestModule module) {
return new ApplicationTestModule_ProvideInjectedData$app_compileDebugKotlinFactory(module);
}
}
AndroidStudio无法解析provideInjectedData$app_compileDebugKotlin()
的位置。测试运行失败。
我重新验证当使用Kotlin 1.0.2(1.0.1-2)时,上述功能也存在也无法通过AndroidStudio解析。但测试仍在进行中。
这是Kotlin还是Dagger问题?我怎么能解决这个问题?
要复制问题,可以在https://github.com/elye/kotlinespressomock中找到代码。只需将ext.KOTLIN_VERSION = '1.0.1-2'
更改为ext.KOTLIN_VERSION = '1.0.3'
,然后在AndroidTest中运行MainActivityTest
。