Ausführen dateibasierter Tests auf der Junit 5-Plattform mit Apache Maven Surefire

mlxyz

Ich habe eine benutzerdefinierte implementiert TestEngineKlasse der in der Lage ist , zu entdecken und führen Sie Unit - Tests von *.csvDateien (nicht Java - Klassen) , indem für die Überprüfung FileSelectorin dem EngineDiscoveryRequest5 von JUnit.

Ich kann diese Tests ohne Probleme mit dem ConsoleLaunchervom Junit-Team bereitgestellten Aufruf org.junit.platform.console.ConsoleLauncher -f build/resources/test/testfile_1.csvausführen (dies wird von einer gradle-Aufgabe aufgerufen, da gradle keine ressourcenbasierten Tests unterstützt, aber das sollte hier keine Rolle spielen).

Jetzt versuche ich, dieselben Tests mit derselben benutzerdefinierten Test-Engine auszuführen, jedoch mit Maven und dem Surefire-Plugin anstelle des Konsolenstarters. Mein aktuelles pom.xmlsieht wie folgt aus (relevanter Teil):

<project>
    <dependencies>
        <dependency>
            <groupId>my_custom_test_engine</groupId>
            <artifactId>custom_test_engine</artifactId>
            <version>1.0-SNAPSHOT</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.junit.platform</groupId>
            <artifactId>junit-platform-engine</artifactId>
            <version>1.7.0-M1</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.junit.platform</groupId>
            <artifactId>junit-platform-console</artifactId>
            <version>1.7.0-M1</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-simple</artifactId>
            <version>1.7.30</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>3.0.0-M5</version>
            </plugin>
        </plugins>
    </build>
</project>

Leider surefire:testscheint meine Test-Engine nicht einmal zur Entdeckung aufzurufen und endet nur mit:

[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  0.626 s
[INFO] Finished at: 2020-06-20T17:00:01+02:00
[INFO] ------------------------------------------------------------------------

Ich habe keine Testklassen in meinem srcOrdner, nur eine Testdatei unter resources/testfile_1.csv.

Unterstützt todsicheres Testen mit Junit 5 sogar dateibasiertes Testen? Wenn ja, wie kann ich Surefire zwingen, meine benutzerdefinierte Test-Engine zur Testerkennung aufzurufen?

-- Aktualisieren

Der Discovery-Teil meiner TestEngineImplementierung sieht in etwa so aus (nur relevanter Teil gezeigt):

public class MyTestEngine implements TestEngine {

    @Override
    public TestDescriptor discover(EngineDiscoveryRequest discoveryRequest, UniqueId uniqueId) {
        EngineDescriptor engineDescriptor = new EngineDescriptor(uniqueId, name);

        logger.debug("Discovering tests");

        discoveryRequest.getSelectorsByType(FileSelector.class).forEach(selector -> {
            logger.debug("Discovered: {}", selector.getFile().getAbsolutePath());
                engineDescriptor.addChild(new TestDescriptor (engineDescriptor.getUniqueId(), selector.getFile().getName()));

        });
}

-- Update 2 Meine Testdateien befinden sich unter src/test/resources.

mlxyz

Herausgefunden. Dank geht an @johanneslink, der mich in die richtige Richtung gewiesen hat.

Surefire unterstützt tatsächlich kein ressourcenbasiertes Testen (siehe auch diese Ausgabe ). Stattdessen habe ich (wie von @johanneslink empfohlen) eine leere Klasse erstellt, die von Surefire erkannt werden kann, damit der Brauch TestEngineaufgerufen wird:

public class TestInitializer {
}

Dann suche TestEngineich in meinem nach ClassSelectorden ressourcenbasierten Tests und entdecke sie:

discoveryRequest.getSelectorsByType(ClassSelector.class).forEach(selector -> {
            if (selector.getClassName().equals(TestInitializer.class.getName())) {
                discoverTests(new File(System.getenv("test_dir")), engineDescriptor);
            }
        });

Das eigentliche Verzeichnis, in dem sich meine Testdateien befinden, wird mit der Umgebungsvariablen angegeben test_dir.

Um das benutzerdefinierte zu verwenden TestEngine, ändern Sie es dann pom.xmlwie folgt:

   <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.22.2</version>
                <configuration>
                    <dependenciesToScan>
                        <dependency>
                            my_custom_test_engine:custom_test_engine
                        </dependency>
                    </dependenciesToScan>
                    <includes>
                        <include>**/TestInitializer*
                        </include>
                    </includes>
                    <environmentVariables>
                        <test_dir>target/test-classes
                        </test_dir>
                    </environmentVariables>
                </configuration>
            </plugin>
        </plugins>
    </build>

Die dependenciesToScanEigenschaft stellt sicher, dass die Abhängigkeit, die die TestInitializerKlasse enthält, todsicher durchsucht wird .

Beachten Sie, dass die neueste Version 3.0.0-M5von maven-surefire-pluginin dieser Hinsicht fehlerhaft zu sein scheint, da die Tests erkannt und ausgeführt werden, die Ergebnisse jedoch nicht todsicher werden. Verwenden Sie 2.22.2stattdessen.

Dieser Artikel stammt aus dem Internet. Bitte geben Sie beim Nachdruck die Quelle an.

Bei Verstößen wenden Sie sich bitte [email protected] Löschen.

bearbeiten am
0

Lass mich ein paar Worte sagen

0Kommentare
LoginNach der Teilnahme an der Überprüfung

Verwandte Artikel

Cucumber UndefinedStepException beim Ausführen von Tests mit einem externen Runner basierend auf der JUnit5-Plattform

Ausführen von Junit-Tests mit mpirun unter Verwendung von Maven Surefire

Ausführen von JUnit-Tests mit Maven unter Eclipse

Maven Surefire führt keine JUnit 5-Tests aus

Ausführen von JUnit 5-Tests mit Ausführen als> SWTBot-Tests in Eclipse

Surefire nimmt keine Junit 5-Tests auf

Ausführen von JUnit5-Tests, die als Plug-In in einer Eclipse-Anwendung installiert sind, mit Maven

Führen Sie sowohl JUnit 4 als auch Junit5 mit dem Maven Surefire Plugin - 2020 aus

So konfigurieren Sie mit gradle JUnit4-Tests mit Kategorien unter Verwendung der Vintage-Engine der Jupiter Junit5-Plattform

Java-Versionsproblem mit dem Maven-Surefire-Plugin beim Ausführen des MVN-Tests in Jenkins

Ausführen eines einzelnen JUnit4-Tests in Eclipse mit Maven

Es wurden keine Tests gefunden. - Leere Testsuite beim Ausführen des jUnit 5-Testfalls im Spring Boot Maven-Projekt mit nackten Knochen

JUnit-Tests: Warum ist Maven (Surefire) so viel langsamer als auf Eclipse?

JUnit 5 Surefire Maven: Wie werden Tests für ein dynamisches Webmodulprojekt ausgeführt?

Das Maven Surefire-Plugin erkennt keine Junit5-Tests

Lassen Sie IntelliJ IDEA JUnit-Tests mit der Option -parameters javac ausführen

Maven-Tests führen keine Gurkenszenarien mit Spring Boot 2.2 und JUnit 5 aus

Was ist der Zweck von Karate-Junit5, wenn Sie Tests ohne Karate-Junit5 ausführen können?

Ausführen eines einzelnen TestNG-Tests auf mehreren Threads gleichzeitig mit Maven

Surefire schließt mit @Tag gekennzeichnete JUnit 5-Tests nicht aus

So wählen Sie mit Maven die JUnit5 Tags ausführen

Maven findet keine JUnit-Tests zum Ausführen

ClassNotFoundException beim Ausführen des JUnit-Tests in Maven

Ausführen von JUnit 4-Tests parallel zu FailSafe- und SureFire-Plugins

Ausführen der mit Maven erstellten Jar-Datei auf der Clientseite

Tests laufen nicht mit Junit 5 und Maven

ClassNotFoundException versucht, JUnit-Tests mit Maven in IntelliJ auszuführen

Führen Sie Maven-Tests mit -Dmaven.surefire.debug und -DforkMode = never aus

Fehler beim Ausführen der Pod-Installation - Automatische Zuweisung der Plattform "iOS" mit der Version "8.0" auf dem Ziel "Runner"

TOP Liste

  1. 1

    So legen Sie mit dem Interface Builder unterschiedliche führende Speicherplätze für unterschiedliche Geräte fest

  2. 2

    Fügen Sie eine weitere Schaltfläche zu gwt Suggest Box hinzu

  3. 3

    Wie konvertiere ich einen Vektor von Bytes (u8) in eine Zeichenfolge?

  4. 4

    Wie kann ich in SCSS mehrere Klassen zu einer einzigen kombinieren?

  5. 5

    Wie konvertiert man einen Datenrahmen im langen Format in eine Liste mit einem geeigneten Format?

  6. 6

    Speichern Sie ein MPAndroidChart-Diagramm in einem Bild, ohne es in einer Aktivität anzuzeigen

  7. 7

    Gruppieren Sie Datenrahmenspalten nach ihrem Datum (die Spaltentitel enthalten) und fassen Sie die Instanzen von Einsen und Nullen in R . zusammen

  8. 8

    Tomcat - Leiten Sie den alten Kontextstamm zum neuen Kontextstamm um

  9. 9

    Eclipse Oxygen - Projekte verschwinden

  10. 10

    Wie wählt man Unterschiede mit drei Tabellen aus?

  11. 11

    Tic Tac Toe-Spiel im React-Reset-Button funktioniert nicht

  12. 12

    So berechnen Sie die Verfügbarkeit von Anwendungen (SLA)

  13. 13

    ElasticSearch BulkShardRequest ist aufgrund von org.elasticsearch.common.util.concurrent.EsThreadPoolExecutor fehlgeschlagen

  14. 14

    Wie kann ich den Kaskadenmodus global einstellen?

  15. 15

    Python: Spalten mit demselben Namen zusammenführen, wobei der Mindestwert beibehalten wird

  16. 16

    So erhalten Sie eine gleichmäßige Höhe für alle Eingabefelder

  17. 17

    Wie erstelle ich einen neuen übergeordneten Knoten außerhalb der .ref (/ path) in der Firebase-Echtzeitdatenbank mithilfe von Cloud-Funktionen (Typescript)?

  18. 18

    Was ist schneller: SUM über NULL oder über 0?

  19. 19

    Wie kann ich eine verschachtelte Schleife mit lapply in R ersetzen?

  20. 20

    Kann ich ein Tkinter-Canvas erstellen, das mehrere Zeilen in einem Text-Widget umfasst?

  21. 21

    Ärgerliches Problem mit yaml, das ich nicht lösen kann

heißlabel

Archiv