Frage

Wir bauen unsere EAR & EJB-Projekte mit Maven. Es werden alle die EJB-Projekte bauen und dann werden sie als Abhängigkeit für EAR verwendet, so dass sie schließlich in die EAR-Datei gepackt werden.

Das Problem ist, dass jedes EJB-Projekt JUnit-Tests hat, die die EJB überprüfen. Vorerst sind diese Tests nicht sehr nützlich, weil sie versuchen, Anwendungsserver (JBoss) und führen Methoden aus EJB-Schnittstelle.

verbinden

Gibt es eine Möglichkeit kann ich die EJBs, Build erstellen und die EAR einsetzen und dann alle die Tests von all den EJBs gegen den Applikationsserver laufen?

Für jetzt bin ich die Simulation AP in Tests durch Initiierung EJB-Implementierungsklassen und manuell „Injektion“ Injektionen (someEJBImpl.em = EntityManager ....), die sehr ärgerlich, weil wir eine große Abhängigkeiten zwischen ihnen und ich habe müssen behandeln Transaktionen von mir.

Gibt es eine andere Art und Weise EJB-Tests gegen echte AP laufen? sein deploy EAR mit Teilmenge von EJB-Module nach jedem EJB-Modul kann die bereits gebaut wurden? Aber wie?

Kann maven Tests aller EJB-Module im Rahmen der EAR-Tests ausgeführt werden gesetzt? Wie dies zu tun?

War es hilfreich?

Lösung

Dies ist kein einfaches Problem, und es gibt keine einfache Antwort. Hoffentlich werden diese Zeiger helfen.

Ich denke, Ihre beste Strategie ist, die Tests in die Original-Unit-Tests zu trennen -. Diejenigen, die in Isolation ohne Container laufen können, und die Tests bewegen, die die Behälter in Integrationstests erfordern

Sie können mit Ejb3unit die Tests maximieren, die laufen nicht einen Behälter benötigen. Es hilft, einige der komplizierten Abhängigkeiten zu verspotten. Ejb3unit hat eine Maven-Plugin finden Sie in der Dokumentation für Details ihrer Maven Repository zu verbinden.

Andere spöttischen Frameworks wie JMock kann auch helfen. Sie können Klassen sowie Schnittstellen verspotten, wenn Sie einen verwenden ClassImposteriser .

Für diese Tests, die einen EJB-Container benötigen, können Sie konfigurieren diese als laufen Integrationstests , kann es Sinn machen, um sie zu einem separaten Projekt zu bewegen, abhängig von den Beziehungen zwischen EJB-Projekten.

Es ist möglich, eine eingebettete Jetty-Instanz in Ihrem JUnit zu starten Tests und programmatisch Servlets, um es hinzuzufügen. Natürlich Jetty ist, nicht ein EJB-Container Sie werden eine EJB-Container wie OpenEJB müssen.

So konfigurieren Sie OpenEJB in Jetty, verwenden Sie eine Konfiguration wie folgt aus:

<plugin>
  <groupId>org.mortbay.jetty</groupId>
  <artifactId>maven-jetty-plugin</artifactId>
  <configuration>
    <scanIntervalSeconds>5</scanIntervalSeconds>
    <contextPath>/example</contextPath>
    <systemProperties>
      <systemProperty>
        <name>java.naming.factory.initial</name>
        <value>org.apache.openejb.client.LocalInitialContextFactory</value>
      </systemProperty>
      <systemProperty>
        <name>java.naming.factory.url.pkgs</name>
        <value>org.mortbay.naming</value>
      </systemProperty>
    </systemProperties>
  </configuration>
</plugin>

Die Abhängigkeits Erklärungen für OpenEJB wäre:

<dependency>
  <groupId>org.apache.openejb</groupId>
  <artifactId>openejb-core</artifactId>
  <version>3.1</version>
  <scope>test</scope>
</dependency>

Sie können auch verwenden Selen Hilfe bei den Funktionstests (vorausgesetzt, Sie so weit gekommen) , hier ist eine Führung mit Selen, Jetty und OpenEJB zu tun.

Andere Tipps

Für JBoss können Sie versuchen, den Maven Cargo-Plugin . Ich bin derzeit mit JBoss 5.1 Testen und noch arbeiten daran:

Wo kann ich findet ein komplettes Maven Cargo-Plugin Beispiel für EJB-Tests?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top