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í.
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.