从1.0.2 – 1.0.3升级Kotlin:java.lang.NoSuchMethodError:没有虚方法provideInjectedData $ app_compileDebugKotlin()
我有一个Kotlin咖啡Dagger2小项目。 当我使用Kotlin 1.0.2时效果很好。 迁移到Kotlin 1.0.3后,运行Espresso Instrumental测试(在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生成的ApplicationTestModule的dagger2如下
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); } }
如果提供provideInjectedData$app_compileDebugKotlin()
无法通过AndroidStudio解决。 测试运行失败。
我在使用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'
,然后在ext.KOTLIN_VERSION = '1.0.3'
运行MainActivityTest
。