Ich habe von JUnit3.8 zu JUnit4.4 gewechselt. Ich führe meine Tests mit ant aus. Alle meine Tests werden erfolgreich ausgeführt, aber die Testdienstprogrammklassen schlagen mit dem Fehler "Keine ausführbaren Methoden" fehl. Das Muster, das ich verwende, besteht darin, alle Klassen mit dem Namen * Test * in den Testordner aufzunehmen.
Ich verstehe, dass der Läufer keine Methode finden kann, die mit dem @ Test-Attribut versehen ist. Sie enthalten jedoch keine solchen Anmerkungen, da diese Klassen keine Tests sind. Überraschenderweise beschwert es sich beim Ausführen dieser Tests in Eclipse nicht über diese Klassen.
In JUnit3.8 war dies überhaupt kein Problem, da diese Dienstprogrammklassen TestCase nicht erweiterten und der Runner nicht versuchte, sie auszuführen.
Ich weiß, dass ich diese spezifischen Klassen im Junit-Ziel in Ant Script ausschließen kann. Ich möchte die Build-Datei jedoch nicht bei jeder neuen Dienstprogrammklasse ändern, die ich hinzufüge. Ich kann die Klassen auch umbenennen (aber den Klassen gute Namen zu geben war immer mein schwächstes Talent :-))
Gibt es eine elegante Lösung für dieses Problem?
Antworten:
Angenommen, Sie haben die Kontrolle über das Muster, mit dem Testklassen gefunden werden, würde ich vorschlagen, es so zu ändern, dass es übereinstimmt
*Test
und nicht*Test*
. Auf diese WeiseTestHelper
wird nicht abgestimmt, aberFooTest
wird.quelle
Kommentieren Sie Ihre util-Klassen mit @Ignore. Dies führt dazu, dass JUnit nicht versucht, sie als Tests auszuführen.
quelle
Mein spezieller Fall hat das folgende Szenario. Unsere Tests
alle erstrecken sich
und JUnit versuchte BaseTixContainerTest auszuführen. Der arme BaseTixContainerTest hat nur versucht, den Container einzurichten, den Client einzurichten, Pizza zu bestellen und sich zu entspannen ... Mann.
Wie bereits erwähnt, können Sie die Klasse mit Anmerkungen versehen
Dies führte jedoch dazu, dass JUnit diesen Test als übersprungen meldete (im Gegensatz zu vollständig ignoriert).
Das hat mich irgendwie irritiert.
Also habe ich BaseTixContainerTest abstrakt gemacht und jetzt ignoriert JUnit es wirklich.
quelle
@Ignore
Um zu verhindern, dass JUnit Ihre Testbasisklasse instanziiert, machen Sie es einfach
(@Ignore meldet es als ignoriert, was ich für vorübergehend ignorierte Tests reserviere .)
quelle
protected abstract class
.quelle
Seien Sie vorsichtig, wenn Sie die Code-Vervollständigung einer IDE verwenden, um den Import für hinzuzufügen
@Test
.Es muss zum Beispiel sein
import org.junit.Test
und nichtimport org.testng.annotations.Test
. Wenn Sie Letzteres tun, wird der Fehler "Keine ausführbaren Methoden" angezeigt.quelle
org.junit.jupiter.api.Test
! aber dank dir ist es jetzt gelöstAnt wird jetzt mit dem
skipNonTests
Attribut geliefert, das genau das tun soll, wonach Sie suchen. Sie müssen Ihre Basisklassen nicht in abstrakt ändern oder ihnen Anmerkungen hinzufügen.quelle
skipNonTests
Attribut nur in Ant 1.9+ verfügbar ist, was schade ist, da es unglaublich nützlich aussieht. Es werden auch abstrakte Test-Superklassen ausgeschlossen.Was ist mit dem Hinzufügen einer leeren Testmethode zu diesen Klassen?
quelle
In Ihrer Testklasse, wenn geschrieben import org.junit.jupiter.api.Test; lösche es und schreibe import org.junit.Test; In diesem Fall hat es auch bei mir funktioniert.
quelle
@BeforeAll
und@AfterAll
nicht ausgeführt werden.@BeforeClass
und@AfterClass
, aber JUnit5 nicht. Referenz: junit.org/junit5/docs/current/user-guide/#migrating-from-junit4Ich hatte auch ein ähnliches Problem ("keine ausführbaren Methoden ...") beim Ausführen des einfachsten einfachen Codes (Verwenden von @Test, @Before usw.) und fand die Lösung nirgendwo. Ich habe Junit4 und Eclipse SDK Version 4.1.2 verwendet. Mein Problem wurde mit dem neuesten Eclipse SDK 4.2.2 behoben. Ich hoffe, dies hilft Menschen, die mit einem ähnlichen Problem zu kämpfen haben.
quelle