Wenn ich versuche, den folgenden Test in IntelliJ IDEA auszuführen, wird folgende Meldung angezeigt:
"!!! 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 folgendermaßen 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
java
android
junit
intellij-idea
benstpierre
quelle
quelle
Antworten:
Dieses Problem tritt auf, weil Android Platform (
android.jar
) bereits JUnit-Klassen enthält. Der IDEA-Testläufer lädt diese Klassen und stellt fest, dass sie von der alten JUnit stammen, während Sie versuchen, kommentierte Tests zu verwenden, die eine Funktion der neuen JUnit sind. Daher erhalten Sie den Fehler vom Testläufer.Die Lösung ist einfach, öffnen Sie die
Project Structure
|Modules
|Dependencies
, und bewegen Sie die nachjunit-4.7.jar
oben, so dass es vorherAndroid 1.6 Platform
im Klassenpfad kommt. Jetzt freut sich der Testläufer über das Laden der neuen JUnit-Version.quelle
Class not found: "com.example.intellijgradletest.MainActivityTest"
Mein Modul ist ein Java-Bibliotheksmodul, daher wurde das Problem durch Ändern von JRE auf 1.8 Java 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.
quelle
~/Library/Preferences/AndroidStudioX.X/options/jdk.table.xml
oderC:\Users\Name\.AndroidStudioX.X\config\options\jdk.table.xml
unter Windows. Suchen Sie den Knoten<name value="Android API 28 Platform" />
und setzen Sie ihn<annotationsPath>
auf<root url="jar://$USER_HOME$/Android-SDK/platforms/android-28/data/annotations.zip!/" type="simple" />
. Stellen Sie außerdem sicher, dass der<classPath>
Knotenplatforms/android-28/...
in beiden Dateipfad-URLs enthalten ist. Passen Sie "Android-SDK" an Ihren Ordnernamen an.Ich hatte dieses Problem mit einem Multi-Modul-Projekt (libgdx). Ein Modul ist reines Java und hat Tests. Meine Lösung bestand darin, "alternative JRE verwenden" in der Ausführungskonfiguration meiner Komponententests auf "Java 1.8" zu setzen. Dadurch wird sichergestellt, dass sich keine android.jar im Klassenpfad befindet und der junit 4.x-Runner verwendet wird.
quelle
Ich habe den gleichen Fehler beim Erstellen von beiden
Unit Test
undAndroid Instrument Test
in Android Studio 1.4+ erhalten und es begann verwirrt zu werden. Um zu vermeiden , diesen Fehler zu machen , dass Ihre Testklasse fällt unterAndroid Tests
aufRun/Debug Configurations
Test Artifact
in auf eingestelltBuild Variants
istAndroid Instrumentation Tests
Run
>Edit Configuration
Android Tests
von befindetJUnit
JUnit
löschen Sie einfach die Konfiguration und klicken Sie mit der rechten Maustaste auf die Datei, die Sie testen möchten undRun
erneut. Anschließend wird die Konfiguration unterAndroid Tests
Abschnitt erstellt und auf dem Gerät / Emulator ausgeführt.quelle
test
Ordner zuandroidTest
Ordner verschoben habe. Android Studio hat die Laufkonfiguration danach nicht aktualisiertFür Android Studio - ab Android Studio 1.1 Beta 4 hat Google die Unterstützung für das 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.
quelle
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. Und selbst wenn Sie es schaffen, die Reihenfolge durch Ändern der IML-Datei zu ändern, erhalten Sie eine "Klasse nicht gefunden ...". Dies liegt daran, dass der Testausgabepfad in AndroidStudio nicht festgelegt werden kann.
Tatsächlich gibt es eine Lösung, mit der AndroidStudio, Junit und Robolectric zusammenarbeiten können. Schauen Sie sich diese 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.
quelle
Ich habe den gleichen Fehler, wenn ich mein eigenes Junit-Paket erstellt habe
Um dies zu beheben, habe ich diese beiden Zeilen in meine App-Gradle-Datei eingefügt, wie hier erklärt :
quelle
Ich könnte mir zwei Dinge vorstellen, die passieren könnten
quelle
Dies 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) stellte ich fest, dass die IDE beim Ausführen von Komponententests die Datei android.jar 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 der Umstellung von Intellij auf AS irgendwo auf meinem Computer ein Cache mit Einstellungen verblieben ist, der dazu führte, dass android.jar zum Klassenpfad hinzugefügt wurde.
Ich habe alle Android-bezogenen Caches von meinem Computer gelöscht (im Ordner c: \ users \ USRE_NAME): .android .AndroidStudio .gradle .m2
Danach habe ich das Projekt wieder geöffnet und die Tests haben funktioniert.
Ich versuche immer noch zu verstehen, was schief gelaufen ist, aber das sollte vorerst den Trick machen.
quelle
Ich hatte dieses Problem in Android Studio 1.5, weil ich nicht wusste, dass ich die Einstellung "Testartefakt" in den "Build-Varianten" (untere linke Ecke des Hauptfensters) von "Android-Instrumentierungstests" auf "Komponententests" ändern musste ". Wenn Sie dies tun, können Sie im Projektfenster eine ExampleUnitTest.java-Datei sehen.
quelle
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 auf das Android SDK in eingestellt
Project Structure
(war aus bestimmten 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.quelle
So habe ich es gelöst:
Konfigurationen bearbeiten -> Standardeinstellungen -> Android JUnit -> Folgendes zum Arbeitsverzeichnis hinzufügen:
$ MODULE_DIR $
quelle
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.
quelle
Im Android-Projekt hatte ich
minifyEnabled = true
, nachdem ich es geändert hatte,false
alles funktioniert.quelle
Wenn Sie entfernen
von deinem wird
build.gradle
es funktionierenquelle
Gehen Sie zu Projektstruktur -> Plattformeinstellung, ändern Sie SDKs in 1.8, um mein Problem zu lösen.
quelle
Ich hatte auch das gleiche Problem, nachdem ich in build.gradle gewechselt bin, funktioniert es gut für mich.
Ändern Sie Ihre Junit-Version in build.gradle in:
quelle
Ich folgte der Antwort von CrazyCoder, aber in Abhängigkeiten wurde keine Junit-Datei angezeigt. Also habe ich eine von http://www.java2s.com/Code/Jar/j/Downloadjunitjar.htm heruntergeladen und sie dann durch Drücken der Plus-Taste rechts hinzugefügt. Und es hat funktioniert
quelle
Das Deaktivieren von "Embedded JDK verwenden" in der Projektstruktur / SDK-Position hat in meinem Fall geholfen, aber ich weiß nicht genau, warum es überhaupt fehlgeschlagen ist.
quelle
Ersetzen Sie Ihre android.jar im libs- Ordner durch die neueste. Sie können es hier herunterladen
quelle
In Android Studio,
Open Project Structure -> SDK Location
können Sie sehen ,JDK
Standort, ändern Verwendung „Use Embedded JDK“ Sie besitzenJDK
bewerben, dann ändern zurück zu „Use eingebettet JDK“ , vielleicht ist es Arbeitquelle
In meinem Fall Änderung
JRE
inRun Configurations
Dosis das Problem lösen, aber wenn ich die Lauftaste klicken Sie neben der Testfunktion, dieJRE
werden Optionen auf Standardwerte zurückzusetzen.Schließlich, ähnlich wie bei @CrazyLius Antwort
Project Structure - SDK Location - JDK
, wählen Sie inEmbedded JDK
. Weil es in Android Studio 3.6 kein Kontrollkästchen gibt.quelle
Ich habe die gleiche Nachricht erhalten
durch einen einfachen Anfängerfehler. Ich hatte für eine Klasse (in meinem Fall die HomeController-Klasse) dieselben Paket- und Klassennamen in src / main und src / test verwendet:
Damit hatten die src / main HomeController-Klasse sowie die src / test HomeController-Klasse denselben vollständigen Pfad:
Das Ergebnis: Alle Tests, die von der HomeController-Klasse abhängig waren, sind fehlgeschlagen.
Durch Ändern des Paketnamens und / oder des Klassennamens wurde das Problem behoben. Hier das Beispiel, wenn sowohl der Paketname als auch der Klassenname geändert werden:
Jetzt unterscheiden sich die vollqualifizierten Klassennamen. Der Name der src / main HomeController-Klasse lautet:
und der Name der src / test HomeHontrollerTest-Klasse lautet:
Da die vollständig qualifizierten Klassennamen eindeutig sind, verschwindet das Problem.
quelle