Prueba de interfaz de usuario de Espresso para Android: falla en la ejecución de la prueba: Error en la ejecución de la instrumentación debido a 'java.lang.IllegalAccessError'

Me enfrenté con el siguiente problema:

Cuando estoy tratando de iniciar una prueba de interfaz de usuario independiente usando Espresso siempre obtengo el siguiente mensaje de error de la consola sin ejecutar la prueba.

Test running startedTest running failed: Instrumentation run failed due to 'java.lang.IllegalAccessError' Empty test suite. 

Así que intenté ejecutar comando:

  gradle -q dependencies 

Y obtuve el siguiente resultado:

 androidTestCompile - Classpath for compiling the androidTest sources. +--- com.android.support:support-annotations:23.0.1 +--- com.android.support.test:runner:0.3 | +--- com.android.support.test:exposed-instrumentation-api-publish:0.3 | +--- junit:junit:4.12 | | \--- org.hamcrest:hamcrest-core:1.3 | \--- com.android.support:support-annotations:22.2.0 -> 23.0.1 +--- com.android.support.test:rules:0.3 | \--- com.android.support.test:runner:0.3 (*) +--- com.android.support.test.espresso:espresso-core:2.1 -> 2.2 | +--- com.android.support.test.espresso:espresso-idling-resource:2.2 | +--- com.squareup:javawriter:2.1.1 | +--- javax.inject:javax.inject:1 | +--- org.hamcrest:hamcrest-library:1.3 | | \--- org.hamcrest:hamcrest-core:1.3 | +--- com.android.support.test:rules:0.3 (*) | +--- org.hamcrest:hamcrest-integration:1.3 | | \--- org.hamcrest:hamcrest-library:1.3 (*) | +--- com.google.code.findbugs:jsr305:2.0.1 | +--- javax.annotation:javax.annotation-api:1.2 | \--- com.android.support.test:runner:0.3 (*) +--- com.android.support.test.espresso:espresso-intents:2.2 | \--- com.android.support.test.espresso:espresso-core:2.2 (*) +--- com.android.support.test.espresso:espresso-web:2.2 | +--- org.ccil.cowan.tagsoup:tagsoup:1.2 | +--- com.android.support:support-annotations:22.2.0 -> 23.0.1 | \--- com.android.support.test.espresso:espresso-core:2.2 (*) +--- com.android.support.test.uiautomator:uiautomator-v18:2.1.1 +--- com.android.support.test.espresso:espresso-contrib:2.2 | +--- com.google.android.apps.common.testing.accessibility.framework:accessibility-test-framework:2.0 | | \--- org.hamcrest:hamcrest-core:1.3 | +--- com.android.support:support-v4:22.2.0 | | \--- com.android.support:support-annotations:22.2.0 -> 23.0.1 | +--- com.android.support:recyclerview-v7:22.2.0 | | +--- com.android.support:support-annotations:22.2.0 -> 23.0.1 | | \--- com.android.support:support-v4:22.2.0 (*) | \--- com.android.support.test.espresso:espresso-core:2.2 (*) \--- com.android.support:multidex-instrumentation:1.0.1 

He intentado encontrar la solución en este tema, pero sin la suerte.

Las pruebas fallan después de la actualización de Espresso 2 (falló: La ejecución de instrumentación falló debido a 'java.lang.IllegalAccessError')

No sé qué es exactamente lo que debo hacer para actualizar la prueba de trabajo.

Aquí está el archivo de configuración app.gradle

  android { compileSdkVersion 23 buildToolsVersion "23.0.0" defaultConfig { applicationId "test.my.app" minSdkVersion 18 targetSdkVersion 23 versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" // Enabling multidex support. multiDexEnabled true } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } lintOptions { abortOnError false } packagingOptions { exclude 'LICENSE.txt' exclude 'META-INF/LICENSE.txt' exclude 'META-INF/NOTICE.txt' } } repositories { jcenter() mavenCentral() maven { url "https://repo.commonsware.com.s3.amazonaws.com" } maven { url "https://oss.sonatype.org/content/repositories/snapshots/" } maven { url "https://jitpack.io" } } dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) compile 'com.android.support:appcompat-v7:23.0.1' compile 'com.google.android.gms:play-services:7.8.0' compile 'com.mcxiaoke.volley:library:1.0.18' compile 'com.orhanobut:logger:1.11' compile 'com.google.code.gson:gson:2.3.1' compile 'com.android.support:design:23.0.1' // UI TESTING DEPENDENCIES androidTestCompile 'com.android.support:support-annotations:23.0.1' androidTestCompile 'com.android.support.test:runner:0.3' androidTestCompile 'com.android.support.test:rules:0.3' //androidTestCompile 'com.android.support.test:testing-support-lib:0.1' androidTestCompile 'com.android.support.test.espresso:espresso-core:2.1' androidTestCompile 'com.android.support.test.espresso:espresso-intents:2.2' androidTestCompile 'com.android.support.test.espresso:espresso-web:2.2' androidTestCompile 'com.android.support.test.uiautomator:uiautomator-v18:2.1.1' androidTestCompile 'com.android.support.test.espresso:espresso-contrib:2.2' androidTestCompile('com.android.support:multidex-instrumentation:1.0.1') { exclude group: 'com.android.support', module: 'multidex' } // ORM DATABASE DEPENDENCIES compile 'com.michaelpardo:activeandroid:3.1.0-SNAPSHOT' // STETHO CORE compile 'com.facebook.stetho:stetho:1.1.1' compile 'com.facebook.stetho:stetho-urlconnection:1.1.1' compile 'com.facebook.stetho:stetho-okhttp:1.1.1' // GOOGLE ANALYTICS compile 'com.google.android.gms:play-services-analytics:7.8.0' // JODA TIME FOR ANDROID compile 'net.danlew:android.joda:2.8.2' // SECURE SHARED PREFERENCES compile 'com.scottyab:secure-preferences-lib:0.1.3' // MATERIAL DIALOG compile 'com.avast:android-styled-dialogs:2.2.0' // SQL CIPHER compile 'com.commonsware.cwac:sqlcipher-for-android:3.3.1' // HTML PARSER compile 'org.jsoup:jsoup:1.8.3' // MULTIDEX SUPPORT compile 'com.android.support:multidex:1.0.1' // SECOND MATERIAL DIALOG compile('com.afollestad.material-dialogs:core:0.8.1.0@aar') { transitive = true } compile('com.afollestad.material-dialogs:commons:0.8.0.1@aar') { transitive = true } // ANDROID BOOTSTRAP compile 'com.beardedhen:androidbootstrap:2.0.0' } 

Y Muestra de la clase TEST:

 @RunWith(AndroidJUnit4.class) public class SignInActivityTest extends ActivityInstrumentationTestCase2<SignInActivity> { public TestHelper tl = new TestHelper(); public SignInActivityTest() { super(SignInActivity.class); } @Before public void setUp() throws Exception { super.setUp(); injectInstrumentation(InstrumentationRegistry.getInstrumentation()); SignInActivity lActivity = getActivity(); } // Insert scenario methods here @Test public void processTest() throws InterruptedException { // TODO: strings which are inserted into inputs should be defined as the string constants // Discuss it with Jan Sedlacek. tl.insertTextIntoInput(R.id.login_txv_username, "test"); tl.insertTextIntoInput(R.id.login_txv_password, "test"); } } 

¿Qué debo cambiar para que esto funcione por favor? Me alegraré por cualquier ayuda.

Este es un error de Gradle con MultiDex, como se discute en la edición de Android 194609 :

M … @ felixschulze.de:
… parece que la dependencia 'multidex' se añade a la propia aplicación y el androidTestCompile apk 🙁

Consulte: https://android.googlesource.com/platform/tools/base/+/studio-1.5/build-system/gradle-core/src/main/groovy/com/android/build/gradle/internal/VariantManager. Java # 419

Encontrado una solución, agregue esto a su archivo build.gradle:

 // Workaround for Multidex bug in gradle-android-plugin // Replace Multidex dependency with some dummy dependency to avoid dex problems // @see https://code.google.com/p/android/issues/detail?id=194609 project.getConfigurations().all { config -> if (config.name.contains("AndroidTest")) { config.resolutionStrategy.eachDependency { DependencyResolveDetails details -> if (details.requested.name == "multidex") { details.useTarget("de.felixschulze.teamcity:teamcity-status-message-helper:1.2") } } } } 

Y, no utilice MultiDexTestRunner.

ActivityInstrumentationTestCase2 está desaconsejado tiene que usar ActivityTestRule lugar:

 @RunWith(AndroidJUnit4.class) public class SignInActivityTest { @Rule public ActivityTestRule<SignInActivity> mActivityRule = new ActivityTestRule(SignInActivity.class); public TestHelper tl = new TestHelper(); @Before public void setUp() throws Exception { //currently you don't use Activity instance in your tests //I just put it here as an example how to get the activity from ActivityTestRule SignInActivity lActivity = mActivityRule.getActivity(); } // Insert scenario methods here @Test public void processTest() throws InterruptedException { tl.insertTextIntoInput(R.id.login_txv_username, "test"); tl.insertTextIntoInput(R.id.login_txv_password, "test"); } @After public void tearDown() throws Exception { //do some stuff if needed } } 

Me encontré con un problema muy similar.

La mina fue causada por una InterruptedException en algún hilo de trabajo que detuvo el proceso de prueba. El stacktrace se muestra en el Android Monitor … Pude resolver mi problema por la captura de la excepción.

Esto significa que tiene un problema en el archivo Gradle. Utiliza dependencias incorrectas.

Yo uso robotium y JUnit 4 mi fiabcies:

  dependencies { androidTestCompile fileTree(dir: 'libs', include: 'robotium-solo-5.5.4.jar') androidTestCompile 'junit:junit:4.12' androidTestCompile 'com.android.support.test:runner:0.4' // Set this dependency to use JUnit 4 rules androidTestCompile 'com.android.support.test:rules:0.4' } 
  • Android: Robotium vs marco de prueba de Android
  • No hay identificación para mi prueba de interfaz de usuario de Android
  • Comprobación de ViewPager con Espresso. ¿Cómo funciona la acción a un botón de un elemento?
  • Prueba de la interfaz de usuario de Android con Expresso: No hay actividades en la etapa REANUDADO
  • Cómo rotar la actividad, quiero decir: el cambio de orientación de la pantalla con Espresso?
  • Configuración de gradiente y maven espresso para Android
  • La ejecución falló para la tarea 'app: prepareDebugAndroidTestDependencies'
  • Prueba de desplazamiento sin fin RecyclerView con Espresso y RxJava
  • No se puede conseguir que Robotium funcione en Android Studio
  • Prueba del espresso del androide: prueba vacía suite. No se encontraron pruebas
  • Espresso cómo hacer clic en un ImageView colocado en el primer elemento de la lista?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.