为什么arquillian给了我:无法读取活动容器配置?

时间:2015-01-20 14:41:59

标签: unit-testing junit testng jboss-arquillian jboss-eap-6

我尝试将arquillian解决方案集成到我的maven EJB项目中,该项目包含了我在其他单独项目中使用的EJB。

我使用Jboss EAP6。

所以我将其作为以下内容:

我将arquillian.xml变成了ejbModule / src / test / resources /:

<container qualifier="jboss" default="true">
    <configuration>
        <property name="jbossHome">D:\jbdevstudio\jboss-eap-6.2</property>
    </configuration>
</container> 

在我的项目的pom中,我添加了以下依赖项:

 
<dependency>
   <groupId>org.jboss.arquillian.container</groupId>
    <artifactId>arquillian-jbossas-embedded-6</artifactId>
   <version>1.0.0.Alpha5</version>
</dependency>

<dependency>
   <groupId>org.jboss.arquillian</groupId>
   <artifactId>arquillian-junit</artifactId>
   <version>1.0.0.Alpha5</version>
</dependency>

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

<dependency>
   <groupId>org.jboss.arquillian.protocol</groupId>
   <artifactId>arquillian-protocol-servlet</artifactId>
  <scope>test</scope>
</dependency> 

<dependency>
   <groupId>junit</groupId>
   <artifactId>junit</artifactId>
   <version>4.8.2</version>
</dependency> 
<profiles>
   <profile>
        <id>jbossas-embedded-6</id>
        <activation>
        <activeByDefault>true</activeByDefault>
        </activation>
   </profile>

   <profile>
        <id>arq-jbossas-managed</id>
             <dependencies>
                  <dependency>
                       <groupId>org.jboss.as</groupId>
                       <artifactId>jboss-as-arquillian-containermanaged</artifactId>
                       <scope>test</scope>
                  </dependency>
             </dependencies>
   </profile>

   <profile>
        <id>arq-jbossas-remote</id>
        <dependencies>
             <dependency>
                  <groupId>org.jboss.as</groupId>
                  <artifactId>jboss-as-arquillian-containerremote</artifactId>
                  <scope>test</scope>
             </dependency>
        </dependencies>
   </profile>
</profiles>

测试类:

import javax.inject.Inject;
import org.jboss.arquillian.api.Deployment;
import org.jboss.arquillian.junit.Arquillian;
import org.jboss.shrinkwrap.api.ShrinkWrap;
import org.jboss.shrinkwrap.api.asset.EmptyAsset;
import org.jboss.shrinkwrap.api.spec.JavaArchive;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.oap.subscription.AbstractSubscription;

@RunWith(Arquillian.class)
    public class SubscriptionFactoryTest {   

    @Inject
    private SubscriptionFactory subscriptionFactory;

    @Deployment
    public static JavaArchive getDeployement() {
        System.out.println("### testSayHelloEJB");
        return ShrinkWrap.create(JavaArchive.class, "subscriptionFactory.jar")
            .addClasses(AbstractSubscription.class,SubscriptionFactory.class);

    }



    @Test
    public void getSubscriptionByIdTest() {
        System.out.println("### testSayHelloEJB");
    }
}

EJB类:

@Remote(ISubscriptionFactoryRemote.class)
@Local(ISubscriptionFactoryLocal.class)
@Stateless
public class SubscriptionFactory extends AbstractSubscription implements ISubscriptionFactoryRemote {

    @Override
    public AbstractSubscription getSubscriptionById(final Integer id) {

        AbstractSubscription ret = null;
        if (id != null) {
            // create query
            final StringBuilder queryString = new StringBuilder("select c from AbstractSubscription c ");           

            try {
                queryString.append("where c.id = :id");

                // create query
                Query query = this.getEntityManager().createQuery(queryString.toString());

                // set parameter
                query = query.setParameter("id", id);

                // recovers refCountry
                ret = (AbstractSubscription) query.getSingleResult();

            } catch (final Exception exc) {

            }

        }

        return ret;

    }
}

当我将类测试作为Junit测试运行时,它会给我错误:

 janv. 20, 2015 12:15:34 PM org.jboss.arquillian.impl.client.container.ContainerRegistryCreator getActivatedConfiguration
 Infos: Could not read active container configuration: null 

Faillure Trace:

 java.lang.NoClassDefFoundError: Lorg/jboss/embedded/api/server/JBossASEmbeddedServer;
 at java.lang.Class.getDeclaredFields0(Native Method)
 at java.lang.Class.privateGetDeclaredFields(Class.java:2397)
 at java.lang.Class.getDeclaredFields(Class.java:1806)
 at org.jboss.arquillian.impl.core.Reflections.getFieldInjectionPoints(Reflections.java:74)
 ... 79 more

任何想法。

1 个答案:

答案 0 :(得分:0)

你使用的是Arquillian的旧版本,我至少使用版本1.1.0.Final。我也认为你不需要你定义的一些Arquillian依赖项。

删除arquillian-jbossas-embedded-6arquillian-junit depdendencies。

有很多关于如何在JBoss EAP中使用Arquillian的quickstart示例。看看那里的一些pom,因为它可能有所帮助。