test support android gradle build.gradle android-uiautomator testing-support-library

support - No se puede resolver el símbolo ''AndroidJUnit4''



test android (14)

Obviamente, necesito la declaración de importación correcta para resolver este problema. Según los documentos para AndroidJUnit4 , esto debería ser

import android.support.test.runner.AndroidJUnit4;

Cuando hago eso, Android Studio resalta el runner en rojo y se queja "No se puede resolver el símbolo ''corredor''".

Fondo

Llegué a este punto siguiendo los tutoriales en el sitio de desarrolladores de Android para configurar pruebas usando UI Automator . El primer problema que encontré fue que com.android.support:support-v4:22.2.0 y com.android.support.test:runner:0.2 dependen de diferentes versiones de com.android.support:support-annotations . Seguí las sugerencias de este informe de errores de Android y agregué lo siguiente a allprojects los proyectos en allprojects de mi proyecto:

configurations.all { resolutionStrategy.force ''com.android.support:support-annotations:22.1.0'' }

Esto resolvió el error inmediato, pero sospecho que condujo a mis problemas actuales. ¿Alguien tiene alguna sugerencia sobre cómo solucionar esto?

Secciones relevantes de `./gradlew: aplicación: dependencias

androidTestCompile - Classpath for compiling the androidTest sources. +--- com.jayway.android.robotium:robotium-solo:5.2.1 +--- com.squareup:fest-android:1.0.8 | /--- org.easytesting:fest-assert-core:2.0M10 | /--- org.easytesting:fest-util:1.2.5 +--- com.android.support.test:runner:0.2 | +--- junit:junit-dep:4.10 | | /--- org.hamcrest:hamcrest-core:1.1 | +--- com.android.support.test:exposed-instrumentation-api-publish:0.2 | /--- com.android.support:support-annotations:22.0.0 -> 22.2.0 +--- com.android.support.test:rules:0.2 | /--- com.android.support.test:runner:0.2 (*) /--- com.android.support.test.uiautomator:uiautomator-v18:2.1.0 compile - Classpath for compiling the main sources. +--- com.android.support:appcompat-v7:22.2.0 | /--- com.android.support:support-v4:22.2.0 | /--- com.android.support:support-annotations:22.2.0 +--- com.android.support:support-v4:22.2.0 (*) +--- com.google.android.gms:play-services:6.1.71 | /--- com.android.support:support-v4:20.0.0 -> 22.2.0 (*) +--- com.crashlytics.android:crashlytics:1.+ -> 1.1.13 /--- com.jakewharton:butterknife:5.1.2


¡El clásico Invalidate Caches / Restart me ha ayudado! :)


Agregando

compile com.android.support.test:runner:0.5''

resolvió este problema exacto para mí.


Asegúrese de que su aplicación esté en la variante de compilación de depuración. Vaya a Compilar> Seleccionar variante de compilación ... y se mostrará lo siguiente:


Cometí el error de poner las clases de prueba en src / test . Después de moverlos a src / androidTest / java / se resolvió la dependencia.


Como lo demuestra la lista de respuestas, esto puede ser causado por algunas cosas. Uno más para la lista:

Ejecuté una LINT excesivamente celosa que eliminó todas las importaciones no utilizadas. Esto producirá los mismos errores, y es fácil pasar por alto que este es el problema.

Android-studio resaltará las referencias que faltan en el código de prueba, y aparecerá la ventana emergente ALT-ENTER (este es el bit que es fácil de perder).

A continuación, necesito eliminar las pruebas de LINT, o al menos desactivar esta advertencia.

Editar: @ Code-Apprentice, las líneas que faltaban eran:

import org.junit.After; import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; import static junit.framework.Assert.assertNotNull; import static junit.framework.Assert.assertNull; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue;

Entonces, el primer error en el archivo fue con @RunWith(AndroidJUnit4.class) al comienzo de mi clase de prueba.


En mi caso, esto ayudó para la variante de lanzamiento:

android { ... testBuildType "release" }


Mueva la clase de prueba a src / androidTest / java /. Entonces la dependencia se resolverá.


Ok, ¡aquí está tu error y el mío!

Si vamos a escribir una porción de código para las Pruebas de Unidad Local, no debemos usar @RunWith(AndroidJUnit4.class) porque no usamos AndroidJUnit4 pero necesitamos Junit4. entonces deberíamos escribir @RunWith(JUnit4.class) . Y, por supuesto, su archivo de prueba de Java está en el directorio app/src/test/java/your.package.name .

De lo contrario, si (!!) queremos escribir alguna prueba de unidad instrumentada de Android , debemos poner nuestros archivos de prueba de Java en el directorio app/src/androidTest/java/your.package.name y usar anotaciones como @RunWith(AndroidJUnit4.class)


Resolví el problema haciendo un pequeño cambio en el archivo build.gradle de la aplicación. En la sección de dependencies { ... } , asegúrese de incluir la siguiente línea:

debugImplementation ''com.android.support.test:runner:1.0.1''

o cualquier versión que sea la más nueva en ese momento ( ...Compile está en desuso y ha sido reemplazada por ...Implementation ). Tenga en cuenta el uso de debugImplementation . Android Studio sugirió incluirlo automáticamente con androidTestImplementation , que no funcionó.

Descubrí cómo cambiarlo de prueba a depuración mirando la Estructura del proyecto en Dependencias del módulo de la aplicación, donde puede cambiar el alcance de cada dependencia, consulte a continuación.


Si alguien todavía tiene este problema:

No se puede resolver el símbolo ''AndroidJUnit4''

y usando API 27, en build.gradle que está en el módulo de la aplicación, agregue las siguientes líneas:

testImplementation ''junit:junit:4.12'' // AndroidJUnitRunner and JUnit Rules androidTestImplementation ''com.android.support.test:runner:1.0.2'' androidTestImplementation ''com.android.support.test:rules:1.0.2'' // Espresso dependencies androidTestImplementation ''com.android.support.test.espresso:espresso-core:3.0.2''


Si está utilizando un proyecto con múltiples tipos de compilación, el tipo de compilación seleccionado en la ventana de variante de compilación debe mencionarse con la etiqueta testBuildType en el archivo build.gradle del módulo.

Por ejemplo: si está utilizando la depuración de tipo de compilación, entonces debe agregar android{testBuildType "debug" } , si está usando stage , agregue la android{testBuildType "stage"} en la etiqueta de Android.


Tenga en cuenta que este OP ahora está en 2019, 4 años, así que si está utilizando Android X, entonces AndroidJUnit4.class está en desuso, tiene un error allí y uno más con este androidx.test.ext.junit.runners.AndroidJUnit4 . Sugiero leer estos enlaces para resolver el problema.

AndroidJUnit4.class está en desuso: ¿Cómo usar androidx.test.ext.junit.runners.AndroidJUnit4?

Migrar las pruebas de Junit4 a androidx: ¿Qué causa que ''delegate runner no se pueda cargar''? Para mí, Android Studio sugirió reemplazar

@RunWith(AndroidJUnit4.class)

que fue obsoleto con

@RunWith(AndroidJUnit4ClassRunner.class)

y esto

androidx.test.ext.junit.runners.AndroidJUnit4

con este

import androidx.test.internal.runner.junit4.AndroidJUnit4ClassRunner;

Después de eso, el error desapareció, pero no sé si la prueba futura mientras se ejecuta ¿ok?


pon este código en tus dependencias

compile fileTree(dir: ''libs'', include: [''*.jar'']) androidTestCompile(''com.android.support.test.espresso:espresso-core:2.2.2'', { exclude group: ''com.android.support'', module: ''support-annotations'' })


Actualizar

La Biblioteca de pruebas de Android ahora es parte de AndroidX. Asegúrese de utilizar las dependencias correctas de Gradle que se encuentran en la documentación oficial .

Respuesta original

Encontré aquí que hay versiones más nuevas de la Biblioteca de soporte de pruebas que las que estaba usando:

dependencies { androidTestCompile ''com.android.support.test:runner:0.5'' androidTestCompile ''com.android.support.test:rules:0.5'' androidTestCompile ''com.android.support.test.uiautomator:uiautomator-v18:2.1.2'' }

Nota: Asegúrese de usar las versiones más recientes de estas bibliotecas. Esta pregunta es de un momento en que la Biblioteca de soporte de prueba de Android era nueva y los números de versión aquí están muy desactualizados.