2017-03-12 1 views
0

Ich lerne Arquillian und ich habe ein Problem.Arquillian + MVN sauberes Paket anstelle von MVN sauberes Paket -DskipTests und MVN Test

Mein Test funktioniert nur, wenn ich zuerst Krieg mit mvn clean package -DskipTests erzeuge und dann Tests mit mvn test Befehl durchführe.

Wenn ich ausführen mvn clean package dann bekomme ich eine Ausnahme und meine Tests nicht durchgeführt werden:

java.lang.RuntimeException: Could not invoke deployment method: public static org.jboss.shrinkwrap.api.spec.WebArchive a.b.c.HelloBeanTest.createDeployment() 
    at a.b.c.HelloBeanTest.createDeployment(HelloBeanTest.java:32) 

Es wäre toll, wenn ich direkt meine Tests ausführen kann, ohne zuerst das letzte Artefakt zu erzeugen.

Dies ist mein Test-Klasse:

@RunWith(Arquillian.class) 
public class HelloBeanTest { 
    @EJB 
    private HelloBean bean; 

    @Deployment 
    public static WebArchive createDeployment() { 
     WebArchive war = ShrinkWrap.createFromZipFile(
       WebArchive.class, new File("target/arquillian-demo-web-1.0.war") 
     ); 

     System.out.println(war.toString(true)); 
     return war; 
    } 

    @Test 
    public void testSay() throws Exception { 
     assertNotNull(bean); 
     System.out.println(bean.say()); 
     System.out.println("- end -"); 
    } 

} 

ich das wollowing versucht, aber es funktioniert nicht für mich:

war = ShrinkWrap.create(MavenImporter.class).loadPomFromFile("pom.xml").importBuildOutput().as(WebArchive.class); 

Antwort

0

Arquillian bietet eine bessere Art und Weise zu tun, was Sie wollen. Die beste Vorgehensweise besteht darin, ShrinkWrap maven importer zu verwenden, um die Anwendung statt maven zu erstellen und zu verpacken.

Aber bevor Sie es tun, überlegen Sie zweimal, ob Sie wirklich die gesamte Anwendung testen möchten (in einem Integrations- oder Systemtest), oder ob Sie kleinere Teile oder größere Komponenten der Anwendungen testen möchten. Die beste Vorgehensweise besteht darin, immer nur die kleinste Teilmenge der gesamten Anwendung zu paketieren, die zum Ausführen des Tests erforderlich ist, und nicht mehr (es ist dann einfacher zu verstehen, was der Test testet und auch schneller ausgeführt wird).

Wenn Sie wirklich die gesamte Anwendung in einem einzigen Testfall testen wollen, dann ist die ShrinkWrap maven importer ich oben erwähnt sollte helfen:

WebArchive war = ShrinkWrap.create(MavenImporter.class) 
    .loadPomFromFile("pom.xml").importBuildOutput().as(WebArchive.class);