Ich stoße hier mit dem Kopf gegen die Wand und versuche herauszufinden, warum IntelliJ / Android "Leere Testsuite" meldet. Ich habe ein kleines Projekt mit zwei IntelliJ-Modulen ("Projekte" in Eclipse). Das Unit-Test-Modul hat eine eigene AndroidManifest.xml, die ich unten eingefügt habe. Ich versuche ein auszuführen ActivityUnitTestCase
, da die Tests vom Context
-Objekt abhängen .
Der Paketname des Hauptmoduls lautet nilzor.myapp
. Der Paketname des Testmoduls lautetnilzor.myapp.tests
Warum erkennt der Testläufer die testBlah()
Methode nicht als Test?
<?xml version="1.0" encoding="utf-8"?>
<!-- package name must be unique so suffix with "tests" so package loader doesn't ignore us -->
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="nilzor.myapp.tests"
android:versionCode="1"
android:versionName="1.0">
<!-- We add an application tag here just so that we can indicate that
this package needs to link against the android.test library,
which is needed when building test cases. -->
<application>
<uses-library android:name="android.test.runner"/>
</application>
<!--
This declares that this application uses the instrumentation test runner targeting
the package of nilzor.myapp. To run the tests use the command:
"adb shell am instrument -w nilzor.myapp.tests/android.test.InstrumentationTestRunner"
-->
<instrumentation android:name="android.test.InstrumentationTestRunner"
android:targetPackage="nilzor.myapp"
android:label="Tests for nilzor.myapp"/>
</manifest>
Und hier ist meine Testklasse:;
package nilzor.myapp.tests;
public class NilzorSomeTest<T extends Activity> extends ActivityUnitTestCase<T>{
public NilzorSomeTest(Class<T> activityClass){
super(activityClass);
}
@SmallTest
public void testBlah(){
assertEquals(1,1);
}
}
Ich habe die Testgrundlagen und das Dokument zum Testen von Aktivitäten gelesen und versucht, diesem Hello World-Testblog zu folgen , obwohl es für Eclipse ist. Ich kann den Testläufer nicht dazu bringen, meinen Test zu finden und auszuführen. Was mache ich falsch?
Einige der Fragen, bei denen ich mir immer noch unsicher bin, sind:
- Benötige ich eine Anmerkung über der Unit-Testmethode?
- Muss ich der Methode "test" voranstellen, oder ist das nur für JUnit-Tests?
- Kann ich Tests in Unterpaketen von haben
nilzor.myapp.tests
?
Die Hauptfrage dieses Beitrags ist jedoch, warum der Testläufer meinen Test nicht erkennt .
quelle
cmd+shift+t
Verknüpfung, mit der automatisch eine Testklasse am richtigen Paketspeicherort erstellt wird, der der Klasse entspricht, die Sie gerade bearbeiten.@Test
Marker auf den Test zu setzen.Antworten:
Sie müssen einen Standardkonstruktor für Ihre Testklasse angeben, zum Beispiel:
zu Ihren anderen Fragen:
Nein. Meine Tests werden immer noch ohne Anmerkungen ausgeführt, aber ich denke, es ist eine gute Praxis, sie zu haben. Hier können Sie die Größe der auszuführenden Tests festlegen. Siehe Was ist der Zweck der Anmerkungen @SmallTest, @MediumTest und @LargeTest in Android? für mehr Details.
Ja, Sie benötigen das Präfix "Test". InteliJ gibt die Warnung "Methode nie verwendet" aus, wenn kein "Test" -Präfix vorhanden ist, und überspringt diese Methode während des Testlaufs.
Ja. Ich habe meine Tests in Unterpaketen organisiert und es scheint gut zu funktionieren.
quelle
Wenn dies "plötzlich" passiert oder "es hat vor 5 Minuten funktioniert", bestand meine Lösung darin, in die Run / Debug-Konfigurationen zu wechseln und alle Konfigurationen unter "Android-Tests" zu entfernen. Manchmal werden diese Konfigurationen beschädigt, wenn ich die zu testende Klasse umgestalte (z. B. durch Wechseln zu einem neuen Paket).
quelle
Create 'Tests in XXX...
- dann hat es wieder funktioniertKeiner der oben genannten Punkte hat es für mich behoben. Was half, war die Befolgung der Anweisungen :
quelle
Ich hatte ein ähnliches Problem. Ich bin mir nicht sicher, warum dies auftritt, aber ich konnte es beheben, indem ich in Android Studio zu "Datei"> "Caches ungültig machen / neu starten" ging.
quelle
Ich weiß nicht, ob es für Android Studio hilft, aber ich hatte eine Art Intellij-Gradle-Konflikt. Es wurde gelöst, indem Sie mit der rechten Maustaste auf die Testdatei klicken und auf "Datei kompilieren ... Test.java" klicken. Danach konnte ich wieder einzelne Tests durchführen.
quelle
Ich hatte das gleiche Problem unter Android Studio 2.3.1, es stellte sich heraus, dass es nur ein Fehler mit AS war. Das Ausführen des gleichen Tests in Version 2.2.1 funktioniert einwandfrei.
Wenn Sie Android Studio nur auf dem Cannary-Kanal ausführen, empfehle ich Ihnen, auch eine stabile Version zu installieren. http://tools.android.com/tips/using-multiple-android-studio-versions
quelle
Ich hatte Tests, die gut liefen, bis
gradle
Android Studio aktualisiert wurde.Abgesehen davon, dass Sie Ihren Tests einen Standardkonstruktor hinzufügen, müssen Sie möglicherweise einige dieser Schritte ausführen, damit Ihre Testsuite funktioniert
Unter
src/
erstellenandroidTest/java/<your-package-name>/test
. Beachten Sie dieandroidTest
. Alles andereinstrumentTest
wird nicht funktionieren.Fügen Sie dies hinzu
build.gradle
Fügen Sie dies dem hinzu
AndroidManifest.xml
quelle
Für Intellij 15 habe ich dieses Problem behoben durch:
a. Klicken Sie mit der rechten Maustaste auf Ihr Quellverzeichnis (normalerweise src) und klicken Sie auf "Quelle".
b. Klicken Sie mit der rechten Maustaste auf Ihr Testverzeichnis und klicken Sie auf "Test".
C. Klicken Sie mit der rechten Maustaste auf Ihr Out-Verzeichnis und klicken Sie auf "Ausgeschlossen".
a. Klicken Sie auf das Optionsfeld "Modulausgabepfad verwenden".
B. Wählen Sie Ihr Ausgabepfadverzeichnis für 'Ausgabepfad' aus.
C. Wählen Sie Ihr Testpfadverzeichnis für 'Testausgabepfad'.
quelle
Offensichtlich benötigen Sie ein Zielgerät , um Ihre Tests ausführen zu können, da es sich um instrumentierte Tests handelt. Aus bestimmten Gründen werden Sie von Android Studio manchmal nicht aufgefordert, auf dieses Zielgerät zu zeigen und lediglich die Meldung "Empty Test Suite" aufzurufen. Es gibt verschiedene Möglichkeiten, dies zu beheben. Hier einige Beispiele:
Führen Sie Ihre Haupt-App aus und wählen Sie ein Zielgerät oder aus
Wechseln Sie zur Konfiguration Ausführen (Ausführen / Ausführen ... / Konfigurationen bearbeiten) und ändern Sie die Bereitstellungszieloptionen
quelle
In meinem Fall hat keine der vorherigen Antworten funktioniert. Die Lösung bestand darin , die Testklasse einfach in ein anderes Paket zu verschieben .
Dies geschah unter
androidTest/
quelle
In meinem Fall wurde dieses Problem durch einen Fehler in meinem Code verursacht, der sich tatsächlich in der Anwendungsklasse befand, sodass die Zielaktivität nicht geöffnet wurde und die Testausgabe gedruckt wurde
Ich habe versucht, Tests direkt vom Terminal mit auszuführen
adb shell am instrument -w -r -e package your.package -e debug false android.support.test.runner.AndroidJUnitRunner
. Damit druckt es für Sie viel mehr über Ausnahmen.quelle
Ich hatte dieses Problem, weil ich dies in meinem build.gradle hatte:
Auch wenn ich den Android Test Orchestrator nicht verwendet habe (muss versehentlich aus den Tutorials kopiert worden sein).
Das auskommentieren löste es für mich.
quelle
Keine der anderen Lösungen funktionierte für mich, aber ich konnte dies erreichen, indem ich einfach die vorhandene App oder Testsuite deinstallierte und dann die Tests ausführte.
quelle
In meinem Fall hatte das Projekt, an dem ich arbeitete, einige Module. Keine der Lösungen, die ich für diesen Fehler gefunden habe, hat mir geholfen, und dann wurde mir irgendwie klar, dass die Tests auf magische Weise funktionierten, wenn ich die Testabhängigkeiten in BEIDEN der build.gradle-Dateien hinzufügte. Es spielt keine Rolle, ob Ihre Tests nur in einem der Module ausgeführt werden. Beide Gradle-Dateien müssen die Abhängigkeiten und den testInstrumentationRunner-Wert enthalten.
Wenn Ihnen also wie mir keine der anderen Antworten geholfen hat, fügen Sie diese Zeilen zur Datei build.gradle jedes Ihrer Module hinzu:
und dann auch hinzufügen:
quelle
Ich habe gerade die Datei umbenannt und das Problem behoben.
quelle
Ich hatte das gleiche Problem und der Grund war, dass meine Testklasse am Ende des Klassennamens keinen Test hatte!
quelle
Mein Problem wurde durch eine Ausnahme verursacht, die in der
@BeforeClass
Methode meines Testfalls ausgelöst wurde . Es hat nicht dazu geführt, dass der Test fehlgeschlagen ist - ich habe ihn nur durch Überprüfen der Logcat-Ausgabe gefunden.Ich habe die Ausnahme behoben und plötzlich liefen meine Tests!
quelle
Nachdem ich mich heute dem Problem gestellt hatte - ich konnte die instrumentierten Android-Tests nicht mit dem Fehler "Leere Suite" ausführen -, fand ich ein Git-Problem mit diesem Problem und dank Stephan Linzner konnte ich die Tests ausführen.
tl; dr Sie müssen mit der rechten Maustaste auf das Testpaket und nicht auf die Klasse klicken, damit die Tests ausgeführt werden.
Referenz: https://github.com/googlecodelabs/android-testing/issues/27#issuecomment-219074863
quelle
Dieser Artikel hat mir geholfen: Leere Testsuite
Grundsätzlich musste ich ein Paket - instrumentTest / java - unter meinem src-Verzeichnis erstellen und alle Tests dort ablegen. Dann könnte ich diese Tests einzeln durchführen.
quelle
Ich hatte ein Java-Rohprojekt, in dem dies auftrat. Einfach Java + JUnit4. Es befindet sich definitiv mit etwas in Ihren .idea / oder .iml-Dateien. Ich verschrottete meine, importierte sie erneut und schließlich liefen die Tests erneut.
quelle
Die Testklasse kann von der Zusammenstellung ausgeschlossen werden. Korrigieren Sie es in Einstellung-Compiler-Ausschluss.
quelle
Hier sind meine Debugging-Schritte, die ich durchlaufe, wenn Android Studio plötzlich beschließt, das Ausführen / Debuggen von Tests einzustellen (und Junge, das passiert peinlich oft !!):
Ich werde weitere Korrekturen hinzufügen, wenn ich auf sie stoße!
quelle
Ich habe nichts getan und das Problem ist nach einem halben Tag voller Schmerzen verschwunden. Ich habe die Projekte viele Male geöffnet und geschlossen, jeden Klassentest manuell durchgeführt, vielleicht hat das mein Problem behoben.
quelle
In Android Studio mit Spock Framework habe ich die Version meines Gradles von 2.2.2 auf 3.2.1 geändert und alles läuft gut.
quelle
Die akzeptierte Antwort hat mein Problem nicht gelöst. Deshalb habe ich mich für das Kopieren entschieden,
ExampleInstrumentedTest
das standardmäßig in Android Studio erstellt wurde und problemlos ausgeführt werden kann, es während des Kopiervorgangs umbenannt (kein Refactor-> Nach dem Kopieren umbenennen!) Und den Inhalt meines Komponententests eingefügt. Danach verschwand der Fehler.quelle
Beim Versuch, lokale Komponententests in meinem Android Studio 3.0-Projekt auszuführen, ist der Fehler "Leere Testsuite" aufgetreten.
Nachdem ich die Dokumentation für Android-Entwickler gelesen hatte , stellte ich schnell fest, dass das Problem durch meine Gradle-Konfiguration verursacht wurde, die die folgenden Zeilen enthielt.
Die AndroidJUnitRunner-Klasse ist ein JUnit-Testläufer, mit dem Sie Testklassen im JUnit 3- oder JUnit 4-Stil auf Android-Geräten ausführen können .
Da meine Tests lokal waren und daher auf keinem Gerät ausgeführt werden mussten, konnte ich durch Entfernen der obigen Einträge com.android.support.test ... die Komponententests ausführen.
quelle
Ich habe einige Einfügungen in eine Datenbank in der @ BeforeClass-Methode vorgenommen. Mir wurde klar, dass ich ein Problem mit der Objekt- / Datenbankzuordnung hatte. Dieses Datenzuordnungsproblem war für mich die Ursache für dieses Problem.
quelle
In meinem Fall hatte ich meine instrumentierten Tests in
androidTest/java/<package.name>/MyTestingClass
, aber ich hatte meine aktuelle Build-Variante auf "Vorproduktion" gesetzt. Und da ist der Punkt! Wie in der Android Studio-Dokumentation angegeben :Die Nachricht
Class not found. Empty test suite.
erschien so lange, bis ich dies tat:Fügen Sie diese Zeile zu meinem build.gradle hinzu :
Dann habe ich die Tests erneut durchgeführt und diesmal laufen sie einfach perfekt !!!
quelle
Dies ist mir passiert, als ich fälschlicherweise eine nicht nachgebildete Klassenvariable mit der Annotation markiert habe. Die Annotation wurde
@Mock
entfernt und die Tests wurden erfolgreich ausgeführt. Dies geschah mit Junit 4.5 unter Android Studioquelle
Keine Lösung, sondern eine Problemumgehung, mit der Sie schnell wieder auf Kurs kommen:
Finden Sie zunächst einen Test, der funktioniert. Ich habe einen neuen Test geschrieben, bei dem der Fehler "Leere Testsuite" angezeigt wurde. Ich habe andere Tests durchgeführt und sie haben wie gewohnt funktioniert.
Kopieren Sie die Testdatei, die funktioniert. Führen Sie es aus, um sicherzustellen, dass diese Kopie wie das Original funktioniert.
Entfernen Sie den Körper und ersetzen Sie ihn durch Ihren neuen Testcode.
Der Test sollte jetzt funktionieren.
Wir haben ungefähr zwei Stunden damit verbracht, die Ursache zu finden, aber ohne Erfolg.
quelle