2017-09-09 15 views
0

Jboss Seam 2、Hibernate/JPaなどを使用するWebプロジェクトでArquillianを設定しようとしています。私は次のコードの平和を挿入し、私のpom.xmlを更新:Arquillian、Tomcat、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> 

をので、第二段階は、後に、私のpom.xmlに依存関係を追加Arquillianテストクラスを作成しました、参照:

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

} 

は最終的に私は私のテストクラスを実行しようと、私は「MYSERVICE」オブジェクトがnullであることを指摘し、注入するポイントは動作しませんでしたので、私はNullPointerExceptionが得ました。

私は、ShrinkWrapを使用してJavaArchiveに必要なものをすべて挿入しているわけではありません。とにかく、メイヴェンが作ったのと同じように、私の戦争をアキレウスで創り出すことはありますか?

編集1: 私は私のpom.xmlに以下の依存関係を追加しました:

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

をそしてarquillian-seam2とcompabilityので、この依存関係は怒鳴るバージョンを変更:

<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> 

しかし、私はテストを開始しようとすると、私は次のエラーがあります:

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) 

解決策: 私のコンテナをapache-tomcatからjboss-as-5.1に変更しました。

答えて

1

テストで@Inを注入するには、Seam 2拡張機能を使用する必要があります。https://github.com/arquillian/arquillian-extension-seam2。 Seam 2はもはや積極的に開発されていないので、拡張機能自体もそうではないことに留意してください。

+0

私はここでテストして返されます、ありがとう。 – RonaldoLanhellas

+0

私はarquillian-seam2拡張子をputtedしましたが、編集した投稿にエラーが報告されました。手伝って頂けますか ? – RonaldoLanhellas

+0

確かに、私は小さな再生プロジェクトが必要でしょう。このようなことを準備してGitHubで共有できますか? –

関連する問題