web-dev-qa-db-fra.com

Impossible de résoudre le symbole 'AndroidJUnit4'

De toute évidence, j'ai besoin de la déclaration d'importation correcte pour résoudre ce problème. Selon les docs pour AndroidJUnit4 , cela devrait être 

import Android.support.test.runner.AndroidJUnit4;

Lorsque je le fais, Android Studio met en surbrillance runner en rouge et se plaint de "Impossible de résoudre le symbole 'coureur'".

Contexte

Je suis arrivé à ce point en suivant les tutoriels sur le site de développement Android pour la configuration des tests à l'aide de UI Automator . Le premier problème que j'ai rencontré est que com.Android.support:support-v4:22.2.0 et com.Android.support.test:runner:0.2 dépendent de différentes versions de com.Android.support:support-annotations. J'ai suivi les suggestions de ce rapport de bogue Android et ajouté ce qui suit à allprojects dans le build.gradle de mon projet:

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

Cela a résolu l'erreur immédiate, mais je soupçonne que cela a entraîné mes problèmes actuels. Quelqu'un at-il des suggestions sur la façon de résoudre ce problème?

Sections pertinentes de `./gradlew: app: dépendances

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
109
Code-Apprentice

Mettre à jour

La bibliothèque de tests Android fait maintenant partie d'AndroidX. Veillez à utiliser les dépendances Gradle correctes trouvées dans la documentation officielle .

Réponse originale

J'ai trouvé ici qu'il existe des versions plus récentes de la bibliothèque de support de test que celle que j'utilisais:

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'
}

Remarque: veillez à utiliser les versions les plus récentes de ces bibliothèques. Cette question a été posée à un moment où la bibliothèque de test Android Test était nouvelle et les numéros de version ici très obsolètes.

26
Code-Apprentice

Assurez-vous que votre application dans la variante de construction debug. Allez à Build> Sélectionnez une variante de construction ... et les informations suivantes devraient apparaître:

 enter image description here

159
orium

J'ai fait l'erreur de mettre les classes de test à src/test . Après les avoir déplacés vers src/androidTest/Java/, la dépendance a été résolue.

94
mikes

Ok donc voici ton erreur et la mienne!

Si nous allons écrire un extrait de code pour Test d'unité locale , nous ne devrions pas utiliser @RunWith(AndroidJUnit4.class) car nous n'utilisons pas AndroidJUnit4 mais nous avons besoin de Junit4. nous devrions donc écrire @RunWith(JUnit4.class). Et bien sûr, votre fichier de test Java se trouve dans le répertoire app/src/test/Java/your.package.name.

Sinon si (!!) nous voulons écrire quelques Android Instrumented Unit Test nous devrions placer nos fichiers Java de test dans le répertoire app/src/androidTest/Java/your.package.name et utiliser des annotations comme @RunWith(AndroidJUnit4.class)

59
Sepehr Behroozi

J'ai résolu le problème en apportant une petite modification au fichier build.gradle de l'application. Dans la section dependencies { ... }, veillez à inclure la ligne suivante:

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

ou quelle que soit la version la plus récente à ce moment-là (...Compile est obsolète et a été remplacé par ...Implementation). Note l'utilisation de debugImplementation. Android Studio a suggéré de l'inclure automatiquement avec androidTestImplementation, ce qui n'a pas fonctionné.

J'ai découvert comment changer de test en débogage en consultant la structure de projet sous Dépendances du module d'application, où vous pouvez modifier l'étendue de chaque dépendance, voir ci-dessous.

 Project structure

19
stemadsen

Dans mon cas, cela a aidé pour la variante de publication: 

Android {
    ...
    testBuildType "release" 
}
3
Andrew Glukhoff

Si quelqu'un a encore ce problème:

Impossible de résoudre le symbole 'AndroidJUnit4'

et en utilisant l'API 27, dans le build.gradle qui se trouve dans le module d'application, ajoutez les lignes suivantes:

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'
2
tm81

mettre ce code dans vos dépendances

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'
})

Notez que cet OP est maintenant en 2019, il a 4 ans. Si vous utilisez Android X, alors AndroidJUnit4.class est obsolète, vous avez une erreur et une de plus avec ce androidx.test.ext.junit.runners.AndroidJUnit4 . Je suggère de lire ces liens pour résoudre le problème.

AndroidJUnit4.class est obsolète: comment utiliser androidx.test.ext.junit.runners.AndroidJUnit4?

Migration des tests Junit4 vers androidx: quelles sont les causes du 'délégué ne peut pas être chargé'? Pour moi Android Studio a suggéré de remplacer

@RunWith(AndroidJUnit4.class)

qui a été déconseillé avec

@RunWith(AndroidJUnit4ClassRunner.class)

et ça

androidx.test.ext.junit.runners.AndroidJUnit4

avec ça

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

Après cela, l’erreur est partie mais je ne sais pas si le futur test fonctionnera correctement?!

1
leonidaa

Déplacez la classe de test vers src/androidTest/Java /. Ensuite, la dépendance sera résolue.

1
Komal Nikhare

Si vous utilisez un projet avec plusieurs types de construction, le type de construction sélectionné dans la fenêtre variante de construction doit être mentionné avec la balise testBuildType dans le fichier build.gradle du module.

Par exemple: Si vous utilisez le type de construction debug , vous devez ajouter Android{testBuildType "debug" }, si vous utilisez stage puis ajoutez la déclaration Android{testBuildType "stage"} dans la balise Android.

1
Rahul Rastogi

Le classique Invalidate Caches/Restart m'a aidé! :)

0
user_MGU

Ajouter

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

résolu ce problème exact pour moi.

0
donlys

Comme le montre la liste des réponses, ceci peut être causé par quelques facteurs. Un de plus pour la liste:

J'ai exécuté un LINT trop zélé qui a supprimé toutes les importations inutilisées. Cela produira les mêmes erreurs, et il est facile de rater le problème. 

Android-studio mettra en évidence les références manquantes dans le code de test - et la fenêtre contextuelle ALT-ENTER apparaîtra (il s'agit d'un bit facile à manquer). 

Ensuite, je dois supprimer les tests de LINT - ou au moins désactiver cet avertissement.

Edit: @ Code-Apprentice, les lignes manquantes étaient:

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;

La première erreur dans le fichier était donc avec @RunWith(AndroidJUnit4.class) au début de ma classe de test.

0
winwaed