25 Stimmen

Testklasse, die Testklasse im Abhängigkeitsmodul erweitert

Ich habe eine Testklasse in einem Modul, das eine andere Testklasse in einem seiner Abhängigkeitsmodule erweitert. Wie kann ich den Testcode der Abhängigkeit in den Testbereich des abhängigen Moduls importieren?

Um es zu verdeutlichen, ich habe zwei Module, "Modul-eins", das eine Abhängigkeit von "Modul-zwei" ist. SubTestCase ist eine Unterklasse von TestCase.

modul-eins
          \\src\\test\\java\\com\\example\\TestCase.java
modul-zwei
          \\src\\test\\java\\com\\example\\SubTestCase.java

Aber der Build schlägt fehl, weil der Testcode von "Modul-eins" nicht in "Modul-zwei" importiert wird, sondern nur der Hauptcode.

33voto

Rich Seller Punkte 81404

Sie können den Testcode als zusätzliches Artefakt bereitstellen, indem Sie das Test-Jar-Ziel des maven-jar-plugins verwenden. Es wird dem Projekt angehängt und mit dem Klassifizierer Tests bereitgestellt.

    org.apache.maven.plugins
    maven-jar-plugin

        package

          test-jar

Andere Projekte können dann auf das Test-Jar zugreifen, indem sie den Test-Klassifizierer in der Abhängigkeit deklarieren.

  name.seller.rich
  foo
  1.0.0
  tests
  test

9voto

Haim Raman Punkte 10895

Was Rich Sellers Antwort betrifft: Die Verwendung von tests ist veraltet, siehe das Benutzerhandbuch.

Ich verwende maven 2.2.1 und maven-jar-plugin 2.2 und es ist erforderlich, auf test-jar umzuschalten anstelle von tests.

Beachten Sie, dass Test-JARs nicht transitiv sind und daher möglicherweise explizit hinzugefügt werden müssen.

    ...

            name.seller.rich
            foo
            1.0.0
            test-jar
            test

     ...

Aktualisierung nach dem Kommentar von Mike Sokolov:
Das Benutzerhandbuch für maven 3 wurde am 28.03.2014 aktualisiert, siehe obigen Link.

Es sei darauf hingewiesen, dass in früheren Ausgaben dieses Leitfadens empfohlen wurde, tests anstelle von test-jar zu verwenden. Obwohl dies derzeit für einige Fälle funktioniert, funktioniert es nicht ordnungsgemäß während eines Reaktor-Baus des Test-JAR-Moduls und bei jedem Verbraucher, wenn eine Lebenszyklusphase vor der Installation aufgerufen wird. In einem solchen Szenario wird Maven das Test-JAR nicht aus der Ausgabe des Reaktor-Baus auflösen, sondern aus dem lokalen/öffentlichen Repository. Offensichtlich könnte das JAR aus den Repositories veraltet oder vollständig fehlen, was zu einem Build-Fehler führt (vgl. MNG-2045).

6voto

krosenvold Punkte 73093

Normalerweise wird dieses Problem gelöst, indem modulname-test.jar-Dateien zusätzlich zur regulären modulname.jar-Datei erstellt und bereitgestellt werden. Diese werden wie normale Artefakte in Repositories bereitgestellt. Dies ist nicht vollkommen fehlerfrei, funktioniert aber anständig für Code-Artefakte.

Dann fügen Sie testscoped-Abhängigkeiten zu den Test-Jars für andere Module hinzu.

Sie können dieses Problem auch lösen, indem Sie testscoped-Artefakte im "Haupt"-Bereich in einem separaten Modul platzieren und dieses dann in regulären test-Scope in anderen Modulen einbinden. Diese Lösung funktioniert nicht sehr gut in einem Multi-Modul-Build, in dem jedes Modul einige Test-Artefakte exportiert, da Sie im Grunde genommen 2N Module erhalten.

Viele von uns geben tatsächlich auf, wenn wir feststellen, dass die Anzahl der Klassen ziemlich begrenzt ist und es Probleme mit beiden Lösungen gibt. Wir platzieren sie einfach in einem entsprechend benannten Paket im "Haupt"-Bereich. Ich vergesse einfach immer, warum die ersten beiden Lösungen so mühsam sind.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X