web-dev-qa-db-fra.com

IntelliJ IDEA avec Junit 4.7 "!!! JUnit version 3.8 ou ultérieure attendu:"

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
192
benstpierre

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.

358
CrazyCoder

 enter image description here

mon module est un module de bibliothèque Java, le changement de JRE en 1.8 Java a résolu le problème.

Vous pouvez également le faire globalement via Paramètres du module> Emplacement du SDK> JDK, en spécifiant le JDK 8 d'Oracle au lieu de la copie du SDK d'Android.

31
alexey polusov

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

8
Uwe Post

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

  1. Assurez-vous de suivre les instructions correctement https://developer.Android.com/training/testing/unit-testing/instrumented-unit-tests.html
  2. Assurez-vous que Test Artifact dans Build Variants est défini sur Android Instrumentation Tests
  3. Cliquez sur le menu Run> Edit Configuration
  4. Assurez-vous que votre nom de classe/méthode est dans Android Tests au lieu de JUnit
  5. S'il se trouve dans 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.
6
CallMeLaNN

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.

5
ZahiC

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.

4
rontho

Il y a deux choses que je pourrais imaginer

  • Si votre IDE essaie de démarrer un test Android Junit qui s'exécute directement sur l'émulateur , Vous ne pouvez pas utiliser Junit4.
  • Si vous avez utilisé accidentellement les classes Junit fournies par le jar Android, elles ne peuvent pas être exécutées sur un JVM normal, car il n'existe que de véritables classes compilées pour Android Dalvik vm. 
1
Janusz

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.

1
Winter

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 $

1
liminal

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.

1
ScarOnTheSky

Pour moi, ce problème était dû à une configuration obsolète/interrompue pour les tests. Je devais simplement supprimer la configuration, puis en créer une nouvelle et le problème a été résolu.

Delete the old test configuration

1
shocking

J'ai la même erreur quand j'ai créé mon propre paquet Junit

 enter image description here

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'
}
1
Kevin ABRIOUX

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.

1
Yossi Shmueli

Remplacez votre Android.jar dans le dossier libs par le dernier. Vous pouvez le télécharger à partir de ici

0
Dharak Bhatt

Dans le projet Android, j'avais minifyEnabled = true, après l'avoir changé en false tout fonctionnait.

0
Przemo

Si vous enlevez

testOptions {
    unitTests.returnDefaultValues = true
}

à partir de votre build.gradle cela fonctionnera

0
Chiara

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'
0
Abdul Rizwan

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

0
wusadurski

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é

0
Ayman Harake

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

0
CrazyLiu

Aller à la structure du projet -> Paramétrage de la plate-forme, changer les kits de développement logiciel à 1.8.

0
Lin W