Lorsque je tente d'exécuter le test suivant dans IntelliJ IDEA je reçois le message:
"!!! JUnit version 3.8 ou ultérieure attendu:"
Il convient de noter qu’il s’agit d’un projet Android sur lequel je travaille dans IntelliJ IDEA 9.
public class GameScoreUtilTest {
@Test
public void testCalculateResults() throws Exception {
final Game game = new Game();
final Player player1 = new Player();
{
final PlayedHole playedHole = new PlayedHole();
playedHole.setScore(1);
game.getHoleScoreMap().put(player1, playedHole);
}
{
final PlayedHole playedHole = new PlayedHole();
playedHole.setScore(3);
game.getHoleScoreMap().put(player1, playedHole);
}
final GameResults gameResults = GameScoreUtil.calculateResults(game);
assertEquals(4, gameResults.getScore());
}
}
La trace de pile complète ressemble à ceci ...
!!! JUnit version 3.8 or later expected:
Java.lang.RuntimeException: Stub!
at junit.runner.BaseTestRunner.<init>(BaseTestRunner.Java:5)
at junit.textui.TestRunner.<init>(TestRunner.Java:54)
at junit.textui.TestRunner.<init>(TestRunner.Java:48)
at junit.textui.TestRunner.<init>(TestRunner.Java:41)
at com.intellij.rt.execution.junit.JUnitStarter.junitVersionChecks(JUnitStarter.Java:152)
at com.intellij.rt.execution.junit.JUnitStarter.canWorkWithJUnitVersion(JUnitStarter.Java:136)
at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.Java:49)
at Sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at Sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.Java:39)
at Sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.Java:25)
at Java.lang.reflect.Method.invoke(Method.Java:597)
at com.intellij.rt.execution.application.AppMain.main(AppMain.Java:110)
Process finished with exit code -3
Ce problème se produit car Android Platform (Android.jar
) contient déjà des classes JUnit. IDEA Le programme d'exécution de test charge ces classes et constate qu'elles proviennent de l'ancien JUnit. Lorsque vous essayez d'utiliser des tests annotés qui sont une fonctionnalité du nouveau JUnit, vous obtenez donc l'erreur du programme d'exécution.
La solution est simple, ouvrez le Project Structure
| Modules
| Dependencies
et déplacez le junit-4.7.jar
vers le haut, de sorte qu'il vienne avant Android 1.6 Platform
dans le chemin de classe. Maintenant, le testeur sera content de charger la nouvelle version de JUnit.
J'ai eu ce problème avec un projet multi-module (libgdx). Un module est purement Java et comporte des tests ..__ Ma solution consistait à définir "utiliser l'alternative JRE" sur "Java 1.8" dans la configuration d'exécution de mes tests unitaires. Cela garantit qu’Android.jar ne se trouve pas sur le chemin de classe et que le coureur Junit 4.x est utilisé.
J'ai eu la même erreur lors de la création de Unit Test
et Android Instrument Test
dans Android Studio 1.4+ et cela a commencé à devenir confus. Pour éviter cette erreur assurez-vous que votre classe de test tombe sous Android Tests
sur Run/Debug Configurations
Test Artifact
dans Build Variants
est défini sur Android Instrumentation Tests
Run
> Edit Configuration
Android Tests
au lieu de JUnit
JUnit
, supprimez simplement la configuration et cliquez à nouveau avec le bouton droit de la souris sur le fichier que vous souhaitez tester, puis Run
. Il créera ensuite la configuration dans la section Android Tests
et s’exécutera sur le périphérique/émulateur.Pour Android Studio - à partir de Android Studio 1.1 Beta 4 , Google a pris en charge Android Gradle plugin 1.1.0-RC . Le nouveau plugin prend en charge le test unitaire via Android Studio avec Junit 4+.
Ceci est encore expérimental et il existe quelques étapes manuelles pour le configurer.
Pour tous ceux qui lisent cet article et qui ont toujours le même problème avec AndroidStudio 1.0. Vous ne pouvez pas modifier l'ordre de dépendance dans AndroidStudio si le IDE les réécrit automatiquement. Et, même si vous parvenez à modifier l'ordre en modifiant le fichier .iml, vous obtiendrez une "classe non trouvée ...". En effet, le chemin de sortie de test ne peut pas être défini sur AndroidStudio.
En fait, il existe une solution pour faire fonctionner AndroidStudio, Junit et Robolectric ensemble. Jetez un oeil à ceci https://github.com/JCAndKSolutions/Android-unit-test et utilisez également ce plugin: https://github.com/evant/Android-studio-unit-test -brancher
Fonctionne parfaitement pour moi.
Il y a deux choses que je pourrais imaginer
J'ai eu le même problème mais pour une autre raison. J'étais sur IntelliJ avec un projet Java Gradle standard (pas Android), mais le JDK était défini sur le SDK Android dans Project Structure
(le JDK par défaut pour certaines raisons). C'est vraiment idiot mais IntelliJ n'était pas assez gentil pour m'indiquer ce qui ne va pas, alors je suis resté coincé là-dessus.
Voici comment je l'ai résolu:
Modifier les configurations -> Paramètres par défaut -> Android JUnit -> Ajouter les éléments suivants au répertoire de travail:
$ MODULE_DIR $
J'avais ce problème dans Android Studio 1.5, car je ne savais pas que je devais basculer le paramètre "Test Artifact" dans "Build Variants" (coin inférieur gauche de la fenêtre principale) de "Tests d'instrumentation Android" à "Tests unitaires ". Lorsque vous le faites, vous pouvez voir un fichier ExampleUnitTest.Java dans la fenêtre Projet.
J'ai la même erreur quand j'ai créé mon propre paquet Junit
Pour résoudre ce problème, j’ai ajouté ces deux lignes dans mon fichier de classement d’application comme il est expliqué ici :
dependencies {
...
// Required -- JUnit 4 framework
testCompile 'junit:junit:4.12'
// Optional -- Mockito framework
testCompile 'org.mockito:mockito-core:1.10.19'
}
Cela m'est également arrivé dans Android Studio 1.1 - bien qu'il devrait prendre en charge les tests unitaires sans plug-in.
Sur d'autres machines (même projet, même version d'AS), j'ai constaté que lors de l'exécution de tests unitaires, IDE n'ajoutait pas le fichier Android.jar au chemin de classe, contrairement à ce qu'il était sur ma machine.
Ma meilleure hypothèse était qu'en raison de la conversion de Maven vers Gradle et du passage d'intelli à AS, une mémoire cache de paramètres restait quelque part dans ma machine qui avait entraîné l'ajout d'Android.jar au classpath.
Ce que j’ai fait est d’effacer tous les caches liés à Android de ma machine (sous le dossier c:\users\USRE_NAME): . Android . AndroidStudio .__ gradle . m2 ..
Après cela, j'ai rouvert le projet et les tests ont fonctionné.
J'essaie toujours de comprendre ce qui ne va pas, mais cela devrait faire l'affaire pour le moment.
Remplacez votre Android.jar dans le dossier libs par le dernier. Vous pouvez le télécharger à partir de ici
Dans le projet Android, j'avais minifyEnabled = true
, après l'avoir changé en false
tout fonctionnait.
Si vous enlevez
testOptions {
unitTests.returnDefaultValues = true
}
à partir de votre build.gradle
cela fonctionnera
Je faisais également face au même problème, après être passé à build.gradle, cela fonctionne très bien pour moi.
changez votre version de junit dans build.gradle en:
testImplementation 'junit:junit:3.8'
Désactiver "Utiliser le JDK incorporé" dans Structure de projet/SDK est ce qui m'a aidé dans mon cas, mais je ne sais pas exactement pourquoi cela a échoué.
J'ai suivi la réponse de CrazyCoder mais il n'y avait pas de fichier Junit affiché dans les dépendances. J'ai donc téléchargé celui de http://www.Java2s.com/Code/Jar/j/Downloadjunitjar.htm , puis je l'ai ajouté en appuyant sur le bouton plus sur la droite. Et ça a fonctionné
Dans AndroidStudio, Open Project Structure -> SDK Location
, vous pouvez voir l'emplacement de JDK
, modifier l'utilisation, "Utiliser le JDK intégré" à votre propre propriétaire JDK
à appliquer, puis revenir à - "Utiliser le JDK intégré", c'est peut-être du travail
Aller à la structure du projet -> Paramétrage de la plate-forme, changer les kits de développement logiciel à 1.8.