Ich habe eine benutzerdefinierte implementiert TestEngine
Klasse der in der Lage ist , zu entdecken und führen Sie Unit - Tests von *.csv
Dateien (nicht Java - Klassen) , indem für die Überprüfung FileSelector
in dem EngineDiscoveryRequest
5 von JUnit.
Ich kann diese Tests ohne Probleme mit dem ConsoleLauncher
vom Junit-Team bereitgestellten Aufruf org.junit.platform.console.ConsoleLauncher -f build/resources/test/testfile_1.csv
ausfü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.xml
sieht 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:test
scheint 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 src
Ordner, 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 TestEngine
Implementierung 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
.
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 TestEngine
aufgerufen wird:
public class TestInitializer {
}
Dann suche TestEngine
ich in meinem nach ClassSelector
den 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.xml
wie 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 dependenciesToScan
Eigenschaft stellt sicher, dass die Abhängigkeit, die die TestInitializer
Klasse enthält, todsicher durchsucht wird .
Beachten Sie, dass die neueste Version 3.0.0-M5
von maven-surefire-plugin
in dieser Hinsicht fehlerhaft zu sein scheint, da die Tests erkannt und ausgeführt werden, die Ergebnisse jedoch nicht todsicher werden. Verwenden Sie 2.22.2
stattdessen.
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.
Lass mich ein paar Worte sagen