java.lang.AbstractMethodError: абстрактный метод при запуске espresso на Kotlin с Mockito

У меня есть инструментальный тест эспрессо, который использует mockito. Класс тестирования, как показано ниже.

import android.support.test.InstrumentationRegistry import android.support.test.rule.ActivityTestRule import org.junit.Before import org.junit.Rule import org.junit.Test import org.junit.rules.RuleChain import org.junit.rules.TestRule import android.support.test.espresso.Espresso.onView import android.support.test.espresso.assertion.ViewAssertions.matches import android.support.test.espresso.matcher.ViewMatchers.withId import android.support.test.espresso.matcher.ViewMatchers.withText import org.mockito.Mockito.`when` class MainActivityTest { val component = TestComponentRule(InstrumentationRegistry.getTargetContext()) val main = ActivityTestRule(MainActivity::class.java, false, false) // TestComponentRule needs to go first so we make sure the ApplicationTestComponent is set // in the Application before any Activity is launched. @JvmField @Rule var chain: TestRule = RuleChain.outerRule(component).around(main) @Before fun setUp() { } @Test fun simpleTrueTest() { `when`(component.mockInjectedData.status).thenReturn(true) main.launchActivity(null) onView(withId(R.id.txt_myview)).check(matches(withText("True"))) } @Test fun simpleFalseTest() { `when`(component.mockInjectedData.status).thenReturn(false) main.launchActivity(null) onView(withId(R.id.txt_myview)).check(matches(withText("False"))) } } 

Мой TestComponentRule, как показано ниже

 import android.content.Context import org.junit.rules.TestRule import org.junit.runner.Description import org.junit.runners.model.Statement class TestComponentRule(val context: Context) : TestRule { private var mTestComponent: ApplicationTestComponent? = null val mockInjectedData: InjectedData get() = mTestComponent!!.dataManager() private fun setupDaggerTestComponentInApplication() { val application = MainApplication[context] mTestComponent = DaggerApplicationTestComponent.builder().applicationTestModule(ApplicationTestModule(application)).build() application.component = mTestComponent as ApplicationComponent } override fun apply(base: Statement, description: Description): Statement { return object : Statement() { @Throws(Throwable::class) override fun evaluate() { try { setupDaggerTestComponentInApplication() base.evaluate() } finally { mTestComponent = null } } } } } 

И мой Кинжал TestModule

 import android.app.Application import javax.inject.Singleton import dagger.Module import dagger.Provides import org.mockito.Mockito.mock @Module class ApplicationTestModule(protected val mApplication: Application) { @Provides internal fun provideApplication(): Application { return mApplication } @Provides @Singleton internal fun provideInjectedData(): InjectedData { return mock(InjectedData::class.java) } } 

И мой файл build.gradle, как показано ниже

 dependencies { final SUPPORT_LIBRARY_VERSION = '23.4.0' final DAGGER_VERSION = '2.2' final DEXMAKER_VERSION = '1.4' final MOCKITO_VERSION = '1.10.19' final ESPRESSO_VERSION = '2.2.1' final JUNIT_VERSION = '4.12' final RUNNER_VERSION = '0.4' compile fileTree(dir: 'libs', include: ['*.jar']) testCompile "junit:junit:$JUNIT_VERSION" compile "com.android.support:appcompat-v7:$SUPPORT_LIBRARY_VERSION" compile "com.google.dagger:dagger:$DAGGER_VERSION" kapt "com.google.dagger:dagger-compiler:$DAGGER_VERSION" kaptAndroidTest "com.google.dagger:dagger-compiler:$DAGGER_VERSION" apt "com.google.dagger:dagger-compiler:$DAGGER_VERSION" androidTestApt "com.google.dagger:dagger-compiler:$DAGGER_VERSION" provided 'org.glassfish:javax.annotation:10.0-b28' compile "org.jetbrains.kotlin:kotlin-stdlib:$KOTLIN_VERSION" androidTestCompile "com.android.support:support-annotations:$SUPPORT_LIBRARY_VERSION" androidTestCompile("com.android.support.test.espresso:espresso-contrib:$ESPRESSO_VERSION") { exclude group: 'com.android.support', module: 'appcompat' exclude group: 'com.android.support', module: 'support-v4' exclude group: 'com.android.support', module: 'recyclerview-v7' } androidTestCompile "com.android.support.test.espresso:espresso-core:$ESPRESSO_VERSION" androidTestCompile "com.android.support.test.espresso:espresso-intents:$ESPRESSO_VERSION" androidTestCompile "com.android.support.test:runner:$RUNNER_VERSION" androidTestCompile "com.android.support.test:rules:$RUNNER_VERSION" androidTestCompile "org.mockito:mockito-core:$MOCKITO_VERSION" androidTestCompile "com.crittercism.dexmaker:dexmaker:$DEXMAKER_VERSION" androidTestCompile "com.crittercism.dexmaker:dexmaker-dx:$DEXMAKER_VERSION" androidTestCompile "com.crittercism.dexmaker:dexmaker-mockito:$DEXMAKER_VERSION" androidTestCompile ("com.nhaarman:mockito-kotlin:0.4.1") { exclude group: "org.jetbrains.kotlin", module: 'kotlin-stdlib' } } 

Когда я запускаю свой тест Instrumentation, это ошибка на

  `when`(component.mockInjectedData.status).thenReturn(true) 

а также

  `when`(component.mockInjectedData.status).thenReturn(false) 

с ошибкой

 java.lang.AbstractMethodError: abstract method "org.mockito.plugins.MockMaker$TypeMockability org.mockito.plugins.MockMaker.isTypeMockable(java.lang.Class)" at org.mockito.internal.util.MockUtil.typeMockabilityOf(MockUtil.java:26) at org.mockito.internal.util.MockCreationValidator.validateType(MockCreationValidator.java:21) at org.mockito.internal.creation.MockSettingsImpl.validatedSettings(MockSettingsImpl.java:167) at org.mockito.internal.creation.MockSettingsImpl.confirm(MockSettingsImpl.java:161) at org.mockito.internal.MockitoCore.mock(MockitoCore.java:54) at org.mockito.Mockito.mock(Mockito.java:1449) at org.mockito.Mockito.mock(Mockito.java:1362) 

Видимо, удалите ниже библиотеку Mockito-Kotlin из моего build.gradle, решив проблему

 androidTestCompile ("com.nhaarman:mockito-kotlin:0.4.1") { exclude group: "org.jetbrains.kotlin", module: 'kotlin-stdlib' } 

ОБНОВЛЕНО

Сообщается о проблеме для nhaarman, согласно https://github.com/nhaarman/mockito-kotlin/issues/46

Intereting Posts
LinkageError для экземпляра класса Kotlin с уведомлением метода () kotlin.TypeCastException: null не может быть применено к ненулевому типу com.midsizemango.databasekotlin.Note Включить ведение журнала в операторе Элвиса? JEXL3 – Невозможно переопределить bitwiseXor в JexlArithemtic? Котлин: оператор двойной толстой кишки (отражение) Не удалось передать строковое значение строки в @BindingAdapter в Котлине Как получить доступ к «Activity.this» в Котлине? Присвоить новое значение переменным с помощью метода в Котлин? Какая версия Dokka идет с какой версией Kotlin? Как получить вход от пользователя в Android Studio в числовом значении и преобразовать его в переменную int в kotlin? Предоставление общего экземпляра в Kotlin & Guice Попросите класс Non-Generic использовать общий аргумент в конструкторе Как сравнить классы и интерфейсы? Тест интеграции с весной – аутентификацияПриглашение не вводится RxJava с использованием Kotlin – как синхронизировать 2 асинхронных метода, рефакторинг с Java