it-swarm.com.de

IntelliJ IDEA mit Junit 4.7 "!!! JUnit Version 3.8 oder höher erwartet:"

Wenn ich versuche, den folgenden Test in IntelliJ IDEA auszuführen, erhalte ich die Nachricht:

"!!! JUnit Version 3.8 oder höher erwartet:"

Es ist zu beachten, dass dies ein Android - Projekt ist, an dem ich in IntelliJ IDEA 9 arbeite.

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());
    }
}

Die vollständige Stapelverfolgung sieht so aus ...

!!! 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

Dieses Problem tritt auf, weil die Android-Plattform (Android.jar) bereits JUnit-Klassen enthält. IDEA test runner lädt diese Klassen und erkennt, dass sie von der alten JUnit stammen, während Sie versuchen, kommentierte Tests zu verwenden, was eine Funktion der neuen JUnit ist. Daher erhalten Sie den Fehler vom Testrunner.

Die Lösung ist einfach, öffnen Sie den Project Structure | Modules | Dependencies und verschieben Sie den junit-4.7.jar nach oben, so dass er vor Android 1.6 Platform im Klassenpfad steht. Nun freut sich der Testläufer beim Laden der neuen JUnit-Version.

358
CrazyCoder

 enter image description here

mein Modul ist ein Java-Bibliotheksmodul. Durch das Ändern von JRE auf 1.8 Java wurde das Problem behoben.

Sie können dies auch global über Moduleinstellungen> SDK-Speicherort> JDK tun, indem Sie das JDK 8 von Oracle anstelle der Kopie des Android SDK angeben.

31
alexey polusov

Ich hatte dieses Problem mit einem Multi-Modul-Projekt (libgdx). Ein Modul ist reines Java und verfügt über Tests. Meine Lösung bestand darin, in der Laufkonfiguration meiner Unit-Tests "JRE verwenden" auf "Java 1.8" zu setzen. Dadurch wird sichergestellt, dass sich keine Android.jar im Klassenpfad befindet und der junit 4.x-Läufer verwendet wird.

8
Uwe Post

Ich habe die gleiche Fehlermeldung erhalten, als ich Unit Test und Android Instrument Test in Android Studio 1.4+ erstellt habe und es wurde verwirrt. Um diesen Fehler zu vermeiden, stellen Sie sicher, dass Ihre Testklasse unter Android Tests in Run/Debug Configurations liegt

  1. Stellen Sie sicher, dass Sie die Anweisungen richtig befolgen. https://developer.Android.com/training/testing/unit-testing/instrumented-unit-tests.html
  2. Stellen Sie sicher, dass Test Artifact in Build Variants auf Android Instrumentation Tests eingestellt ist.
  3. Klicken Sie auf das Menü Run> Edit Configuration.
  4. Stellen Sie sicher, dass sich Ihr Klassen-/Methodenname innerhalb von Android Tests anstelle von JUnit befindet.
  5. Wenn es sich in JUnit befindet, löschen Sie einfach die config und klicken Sie mit der rechten Maustaste auf die Datei, die Sie testen möchten, und Run erneut. Dann wird die Konfiguration im Abschnitt Android Tests erstellt und auf dem Gerät/Emulator ausgeführt.
6
CallMeLaNN

Für Android Studio - ab Android Studio 1.1 Beta 4 , hat Google die Unterstützung für Android Gradle Plugin 1.1.0-RC hinzugefügt. Das neue Plugin unterstützt Unit Testing über Android Studio mit junit 4+.

Dies ist noch experimentell und es gibt einige manuelle Schritte , um dies einzurichten.

5
ZahiC

Für alle, die diesen Beitrag lesen und immer noch das gleiche Problem mit AndroidStudio 1.0 haben. Sie können die Abhängigkeitsreihenfolge in AndroidStudio nicht ändern. Die IDE schreibt sie automatisch neu. Selbst wenn Sie es schaffen, die Reihenfolge durch Ändern der .iml-Datei zu ändern, wird eine "Klasse nicht gefunden ..." angezeigt. Dies liegt daran, dass der Test-Ausgabepfad nicht in AndroidStudio festgelegt werden kann.

Tatsächlich gibt es eine Lösung, um AndroidStudio, Junit und Robolectric zusammenarbeiten zu lassen. Schauen Sie sich dieses https://github.com/JCAndKSolutions/Android-unit-test an und verwenden Sie auch dieses Plugin: https://github.com/evant/Android-studio-unit-test -plugin

Funktioniert perfekt für mich.

4
rontho

Es gibt zwei Dinge, die ich mir vorstellen könnte

  • Wenn Ihr IDE versucht, einen Android Junit-Test zu starten, der direkt auf dem -Emulator ausgeführt wird, können Sie Junit4 nicht verwenden.
  • Wenn Sie versehentlich die Junit-Klassen verwendet haben, die vom Android-Jar bereitgestellt werden, können sie nicht auf einem normalen Jvm ausgeführt werden, da nur echte kompilierte Klassen für Android dalvik vm vorhanden sind. 
1
Janusz

Ich hatte das gleiche Problem aber aus einem anderen Grund. Ich war auf IntelliJ mit einem regulären Java-Gradle-Projekt (nicht Android), aber das JDK wurde in Project Structure auf das Android SDK gesetzt (war aus einigen Gründen das Standard-JDK). Das ist wirklich dumm, aber IntelliJ war nicht nett genug, um mir anzuzeigen, was los ist, also blieb ich dabei hängen.

1
Winter

So habe ich es gelöst:

Konfigurationen bearbeiten -> Standardeinstellungen -> Android JUnit -> Fügen Sie dem Arbeitsverzeichnis Folgendes hinzu:

$ MODULE_DIR $

1
liminal

Ich hatte dieses Problem in Android Studio 1.5, weil ich nicht wusste, dass ich die Einstellung "Test Artifact" in den "Build Variants" (untere linke Ecke des Hauptfensters) von "Android Instrumentation Tests" auf "Unit Tests" umstellen musste ". Wenn Sie dies tun, können Sie eine Datei ExampleUnitTest.Java im Projektfenster sehen.

1
ScarOnTheSky

Für mich wurde dieses Problem durch eine veraltete/fehlerhafte Laufkonfiguration für die Tests verursacht. Ich musste einfach die Konfiguration löschen, dann eine neue erstellen und das Problem wurde behoben.

Delete the old test configuration

1
shocking

Ich habe die gleiche Fehlermeldung, wenn ich mein eigenes Junit-Paket erstellt habe

enter image description here

Um dies zu beheben, habe ich diese beiden Zeilen in meiner App-Gradle-Datei hinzugefügt, wie es here erklärt:

dependencies {
    ...
    // Required -- JUnit 4 framework
    testCompile 'junit:junit:4.12'
    // Optional -- Mockito framework
    testCompile 'org.mockito:mockito-core:1.10.19'
}
1
Kevin ABRIOUX

Das ist mir auch in Android Studio 1.1 passiert - obwohl es Unit-Tests ohne Plugin unterstützen sollte.

Auf anderen Computern (dasselbe Projekt, dieselbe Version von AS) habe ich festgestellt, dass IDE beim Ausführen von Komponententests die Android.jar-Datei nicht zum Klassenpfad hinzufügt, während dies auf meinem Computer der Fall ist.

Meine beste Vermutung war, dass aufgrund der Konvertierung von Maven nach Gradle und dem Wechsel von intellij zu AS ein Teil der Einstellungen auf meinem Computer verblieb, der dazu führte, dass Android.jar zum Klassenpfad hinzugefügt wurde.

Was ich getan habe, ist das Löschen aller Android-Caches von meinem Computer (unter dem Ordner c:\users\USRE_NAME): . Android . AndroidStudio . gradle . m2

Danach habe ich das Projekt wieder geöffnet und die Tests funktionierten.

Ich versuche immer noch zu verstehen, was schief gelaufen ist, aber dies sollte den Trick für jetzt tun.

1
Yossi Shmueli

Ersetzen Sie Ihr Android.jar im libs -Ordner durch das neueste. Sie können es von hier herunterladen

0
Dharak Bhatt

Im Android-Projekt hatte ich minifyEnabled = true, nachdem ich es in false geändert hatte, alles funktionierte.

0
Przemo

Wenn du entfernst

testOptions {
    unitTests.returnDefaultValues = true
}

von Ihrem build.gradle wird es funktionieren

0
Chiara

Ich war auch mit dem gleichen Problem konfrontiert, nachdem ich mich in build.gradle verwandelt hatte, es funktioniert gut für mich.

Ändern Sie Ihre junit-Version in build.gradle in:  

    testImplementation 'junit:junit:3.8'
0
Abdul Rizwan

Das Deaktivieren von "Embedded JDK verwenden" in Projektstruktur/SDK-Speicherort hat mir zwar geholfen, aber ich weiß nicht genau, warum der Fehler überhaupt fehlschlug.

0
wusadurski

Ich folgte der Antwort von CrazyCoder, aber in Abhängigkeiten wurde keine Junit-Datei angezeigt. Also lud ich eines von http://www.Java2s.com/Code/Jar/j/Downloadjunitjar.htm herunter und fügte es dann hinzu, indem ich auf den Plus-Button rechts drückte. Und es hat funktioniert

0
Ayman Harake

In AndroidStudio, Open Project Structure -> SDK Location, können Sie den JDK -Pfad anzeigen. Ändern Sie use "Embedded JDK verwenden", um JDK zu übernehmen, und wechseln Sie dann zurück zu - "Benutze eingebettetes JDK", es funktioniert vielleicht

0
CrazyLiu

Gehen Sie zu Projektstruktur -> Plattformeinstellungen, ändern Sie die SDKs in 1.8 Mein Problem wurde gelöst.

0
Lin W