2017-12-13 5 views
0

Ich arbeite an der Erstellung eines JAR mit meinem Testcode und plane, den Test von einem anderen Projekt aus auszuführen.Ausführen von Tests aus der JAR-Abhängigkeit

Unten ist der Ansatz, den ich versuche zu implementieren.

Projekt B:

configurations { testApi } 
task testJar .... 
artifacts { testApi testJar } 

Projekt A:

dependencies { 
    testRuntime "xx.xxx.xxx.projectName", configuration: "integtest"; 
} 

Der Test scheint nicht mit diesem Ansatz zu laufen. Irgendeine Idee zu was könnte das Problem sein? Irgendwelche besseren Ansätze?

+0

Bitte erarbeiten Sie ein bisschen mehr, e. G. was läuft "nicht" welcher Fehler bekommst du usw. – Vampire

+0

Wenn ich 'grddle test' starte, werden die Testklassen nicht aus dem Jar erkannt. Aber der Build wird erfolgreich abgeschlossen – AvenashKrish

Antwort

0

Gradle sieht nur für Testklassen in den Verzeichnissen über testClassesDirs Eigentum der jeweiligen Test -Typ Aufgabe konfigurieren, die mit dem java Plugin project.sourceSets.test.output.classesDirs für die test Aufgabe. Das Ausführen von Tests aus JAR-Dateien in Abhängigkeiten wird nicht unterstützt.

Sie müssen die JAR-Datei extrahieren und das extrahierte Verzeichnis zu dieser Eigenschaft hinzufügen. Ich denke, etwas wie das folgende Konstrukt sollte funktionieren, ich habe es aber nicht getestet:

configurations { 
    externalTests 
} 
dependencies { 
    externalTests "xx.xxx.xxx.projectName", configuration: "integtest" 
    testRuntime "xx.xxx.xxx.projectName", configuration: "integtest" 
} 
test { 
    // if only one dependency in externalTests you can use the simpler, it will fail if there are multiple dependencies 
    testClassesDirs += zipTree(configurations.externalTests.singleFile) 
    // if multiple dependencies in externalTests you need to use 
    testClassesDirs += configurations.externalTests.files.collect { zipTree it }.sum() 
} 
+0

Danke @Vampire, ich begegne 'initializationError' 'java.lang.ClassNotFoundException' wenn ich den obigen Ansatz versuche, schätze ich, dass es die Klassen nicht erkennt. irgendwelche Ideen? Ich habe versucht, die JAR zu entpacken und die 'testClassesDir = files (" $ {buildDir}/integTest/classes/java ")' 'zu setzen. Auch dies führte zu demselben Fehler. – AvenashKrish

+0

Dann legen Sie es auf den Klassenpfad wie Sie ursprünglich getan haben, aktualisierte ich meine Antwort entsprechend. – Vampire

+0

Scheint so, als ob das nicht funktioniert. Irgendein Vorschlag, die extrahierten Dateien aus JAR zu verwenden, versuche ich wie 'testClassesDir = files (" $ {buildDir}/integTest/classes/java ")' zu verwenden, was ebenfalls zu demselben Fehler führt. – AvenashKrish

Verwandte Themen