2017-09-09 6 views
0

J'essaie de configurer Arquillian dans mon projet Web qui utilise Jboss Seam 2, Hibernate/JPa et d'autres. Je mis à jour mon pom.xml insérer la paix de code suivant:Arquillian, Tomcat et Jboss Seam 2

<dependencyManagement> 
    <dependencies> 
     <!-- https://mvnrepository.com/artifact/org.jboss.arquillian/arquillian-bom --> 
     <dependency> 
      <groupId>org.jboss.arquillian</groupId> 
      <artifactId>arquillian-bom</artifactId> 
      <version>1.1.13.Final</version> 
      <type>pom</type> 
     </dependency> 

    </dependencies> 
</dependencyManagement> 

...

<dependency> 
      <groupId>org.apache.tomcat.embed</groupId> 
      <artifactId>tomcat-embed-core</artifactId> 
      <version>7.0.42</version> 
      <scope>provided</scope> 
     </dependency> 
     <dependency> 
      <groupId>org.apache.tomcat.embed</groupId> 
      <artifactId>tomcat-embed-jasper</artifactId> 
      <version>7.0.42</version> 
      <scope>provided</scope> 
     </dependency> 
     <dependency> 
      <groupId>org.apache.tomcat.embed</groupId> 
      <artifactId>tomcat-embed-logging-juli</artifactId> 
      <version>7.0.42</version> 
      <scope>provided</scope> 
     </dependency> 
     <dependency> 
      <groupId>org.eclipse.jdt.core.compiler</groupId> 
      <artifactId>ecj</artifactId> 
      <version>3.7</version> 
      <scope>provided</scope> 
     </dependency> 

     <dependency> 
      <groupId>org.jboss.arquillian.container</groupId> 
      <artifactId>arquillian-tomcat-embedded-7</artifactId> 
      <version>1.0.0</version> 
      <scope>test</scope> 
     </dependency> 

     <!-- https://mvnrepository.com/artifact/org.jboss.shrinkwrap.resolver/shrinkwrap-resolver-impl-maven --> 
     <dependency> 
      <groupId>org.jboss.shrinkwrap.resolver</groupId> 
      <artifactId>shrinkwrap-resolver-impl-maven</artifactId> 
      <version>2.2.6</version> 
      <scope>test</scope> 
     </dependency> 

     <!-- https://mvnrepository.com/artifact/org.jboss.arquillian.junit/arquillian-junit-container --> 
     <dependency> 
      <groupId>org.jboss.arquillian.junit</groupId> 
      <artifactId>arquillian-junit-container</artifactId> 
      <version>1.1.13.Final</version> 
      <scope>test</scope> 
     </dependency> 

     <dependency> 
      <groupId>junit</groupId> 
      <artifactId>junit</artifactId> 
      <version>${junit.version}</version> 
      <scope>test</scope> 
     </dependency> 

Ainsi, la deuxième étape ajouter après dépendances dans mon pom.xml a été créé une classe de test Arquillian, voir:

package com.projectx; 

import org.jboss.arquillian.container.test.api.Deployment; 
import org.jboss.arquillian.junit.Arquillian; 
import org.jboss.seam.annotations.In; 
import org.jboss.shrinkwrap.api.Archive; 
import org.jboss.shrinkwrap.api.ShrinkWrap; 
import org.jboss.shrinkwrap.api.asset.EmptyAsset; 
import org.jboss.shrinkwrap.api.spec.JavaArchive; 
import org.jboss.shrinkwrap.api.spec.WebArchive; 
import org.junit.Test; 
import org.junit.runner.RunWith; 

import com.projectx.MyService; 

@RunWith(Arquillian.class) 
public class MyServiceTest { 

    @Deployment 
    public static JavaArchive createTestArchive() { 
     JavaArchive jar = ShrinkWrap.create(JavaArchive.class).addPackages(true, "com.projectx"); 
     return jar; 
    } 

    @In 
    private MyService myService; 

    @Test 
    public void validateValue() { 
     ReturnBean returnBean = myService.validateNow(null);   
    } 

} 

Enfin j'ai essayé exécuter ma classe de test et je note que l'objet « MyService » est nulle, le point Injecter ne fonctionnait pas, alors je suis NullPointerException. Je sais que je n'insère pas tout ce qui est nécessaire dans JavaArchive avec ShrinkWrap. Y at-il de toute façon pour créer ma guerre en arquillian exactement comme maven créer?

Edit 1: j'ai ajouté la dépendance suivante dans mon pom.xml:

<dependency> 
      <groupId>org.jboss.arquillian.extension</groupId> 
      <artifactId>arquillian-seam2</artifactId> 
      <version>1.0.0.Beta1</version> 
     </dependency> 

Et changé la version ci-dessous cette dépendances, parce compability avec Arquillian-seam2:

<dependency> 
      <groupId>org.jboss.arquillian.junit</groupId> 
      <artifactId>arquillian-junit-container</artifactId> 
      <version>1.1.1.Final</version> 
      <scope>test</scope> 
     </dependency> 

<dependency> 
       <groupId>org.jboss.arquillian</groupId> 
       <artifactId>arquillian-bom</artifactId> 
       <version>1.1.1.Final</version> 
       <type>pom</type> 
      </dependency> 

Mais quand j'ai essayé de commencer le test, j'ai eu l'erreur suivante:

GRAVE: Exception sending context initialized event to listener instance of class org.jboss.seam.servlet.SeamListener 
java.lang.IllegalStateException: duplicate factory for: org.jboss.seam.web.webSession (duplicate is specified in components.xml) 
    at org.jboss.seam.core.Init.checkDuplicateFactoryExpressions(Init.java:227) 
    at org.jboss.seam.core.Init.checkDuplicateFactory(Init.java:220) 
    at org.jboss.seam.core.Init.addFactoryValueExpression(Init.java:283) 
    at org.jboss.seam.init.Initialization.installComponents(Initialization.java:1152) 
    at org.jboss.seam.init.Initialization.init(Initialization.java:737) 
    at org.jboss.seam.servlet.SeamListener.contextInitialized(SeamListener.java:36) 
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4939) 
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5434) 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901) 
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877) 
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:633) 
    at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:976) 
    at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1653) 
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441) 
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:138) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) 
    at java.lang.Thread.run(Thread.java:662) 

Solution: J'ai changé mon conteneur d'apache-tomcat en jboss-as-5.1.

Répondre

1

Vous devez utiliser l'extension Seam 2 pour faire l'injection à travers @In dans le travail de test - https://github.com/arquillian/arquillian-extension-seam2. Gardez juste à l'esprit que Seam 2 n'est plus en développement actif, l'extension elle-même n'est pas non plus.

+0

Je vais tester et revenir ici, merci. – RonaldoLanhellas

+0

J'ai mis l'extension arquillian-seam2 mais j'ai eu l'erreur reportée dans le post édité. Pouvez-vous m'aider ? – RonaldoLanhellas

+0

Bien sûr, mais idéalement, j'aurais besoin d'un petit projet de reproducteur. Pouvez-vous préparer quelque chose comme ça et partager via GitHub? –