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.
- No se puede ejecutar Robotium en Android Studio con sólo APK
- ¿Cómo usar Espresso UI Testing for React Native?
- Espresso: espera que la actividad finalice la tarea de fondo después de presionarBack ()
- ¿Las pruebas de selenio valen la pena en dispositivos móviles?
- Error de prueba Espresso: AppNotIdleException
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.
- La ejecución falló para la tarea 'app: prepareDebugAndroidTestDependencies'
- Prueba de la interfaz de usuario de Android con Expresso: No hay actividades en la etapa REANUDADO
- Espresso Nested Recycler Vistas Prueba de interfaz de usuario
- No se puede conseguir que Robotium funcione en Android Studio
- 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?
- ¿Cómo "esperar a la actividad" con Appium, en comenzar y durante la prueba en sí?
- Configuración de gradiente y maven espresso para Android
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' }
- RecyclerView no respeta la traducción al reciclar las vistas
- ¿Cómo puedo mostrar los archivos de registro, System.out.println (), en la prueba de Android?