2017-03-12 1 views
0

J'apprends Arquillian et j'ai un problème. Mon test ne fonctionne que si au début je génère la guerre avec mvn clean package -DskipTests puis j'exécute des tests avec la commande mvn test.Arquillian + mvn paquet propre au lieu de mvn paquet propre -DskipTests et test mvn

Si j'exécute mvn clean package puis-je obtenir une exception et mes tests ne sont pas exécutés:

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) 

Ce serait génial si je peux exécuter mes tests directement, sans d'abord générer l'artefact final.

Ceci est ma classe de test:

@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 -"); 
    } 

} 

J'ai essayé le wollowing mais ça ne marche pas pour moi:

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

Répondre

0

Arquillian fournit une meilleure façon de faire ce que vous voulez. La meilleure pratique consiste à utiliser l'importateur ShrinkWrap maven pour créer et empaqueter l'application à la place de maven. Mais avant de le faire, réfléchissez à deux fois si vous voulez vraiment tester l'application entière (dans un test d'intégration ou de système), ou si vous voulez tester des unités plus petites ou des composants plus grands des applications. La meilleure pratique consiste à toujours mettre en package uniquement le plus petit sous-ensemble de l'application requise pour exécuter le test et rien de plus (il est alors plus facile de comprendre ce que le test est en train de tester et de s'exécuter plus rapidement).

Si vous voulez vraiment tester l'application entière dans un seul cas de test, le ShrinkWrap maven importer je l'ai mentionné ci-dessus devrait aider:

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