Maven 2, Remote-JUnit-Tests

schnuffie

Erfahrenes Mitglied
Hallo Experten,

seit Kurzem arbeite ich mit Maven 2. Es handelt sich um ein EAR-Projekt mit Web- und EJB-Inhalten. Beim automatischen Builden läßt Maven auch die JUnit-Tests laufen. So gibt es bei mir beispielsweise ServiceTests, die wie ein Remote-Client den Context zum JBoss aufbauen und sich die Session-Beans remote holen. ;)

Der Test funktioniert nicht, da vorher das EAR nicht deployed wurde.
Das ist auch die Krux an der Sache. Maven läßt die JUnit-Tests vor dem Bauen des EARs laufen. Da es noch kein EAR auf dem JBoss gibt, schlagen diese Tests fehl und das EAR wird nicht gebaut. ;-]

Nun habe ich mit Eclipse-Mitteln vorher ein EAR gebaut, das ich "von Hand" deployed habe. Danach baute auch Maven das EAR, da nun die Tests erfolgreich waren. Das ist doch nicht Sinn der Sache! Somit führt Maven bei jedem Build die Tests aus, die auf das alte (event. fehlerhafte) EAR connected sind. :-(

Wie kann ich Maven dazu überreden, zuerst das EAR zu bauen und zu deployen, ehe die Remote-Tests ausgeführt werden?
 
Das normale Vorgehen in solchen Fällen ist den Container seiner Wahl programmatisch zu starten und die App exploded in den Container zu deployen, also ohne sie vorher zu packen. Das Funktioniert für Jetty und Glassfish sehr gut, wie das mit JBoss ist - keine Ahnung.

Ansonsten könntest du noch einen Blick auf die integration-test Lifecyclephase werfen und die Ausführung bestimmter Tests (z.B. über eine Namenskonvention) an diese Phase hängen. Die liegt nämlich genauch nach der package Phase, so dass du da ein bereits gepacktes EAR zur Verfügung hast.

Gruß
Ollie
 
...ist 'ne Idee Ollie, werd' ich mal probieren. ;-)

Da ich noch kein Maven-Experte bin und somit z.Z. nur grundlegende Tags und Konfigurationen kenne, hätte ich da noch folgende Fragen:
  • Wie ist denn die Filterung für den einen Teil Tests und den anderen Teil Tests in der "integration-test"-Phase in der POM anzugeben?
  • Gibt es die Möglichkeit, daß Maven mit dem Integrations-Test solange wartet, bis das EAR deployed ist und wie gibt man das an?
 
Du machst halt zwei Dinge:

1.) Bindest du das Surefireplugin an die Execution der test Phase und legst die Includes händisch fest (z.B. **/*UnitTest)
2.) Bindest du das Surefireplugin an die Execution der integration-test Phase und legst die Includes händisch fest (z.B. **/*IntegrationTest)

Für grundsätzlichere Fragen zur Maven Konfiguration empfehle ich ein Blick in das Sonatype Maven Buch

REINHAUN!
 
Zurück