标签: jboss-arquillian

无法运行arquillian测试

我正在尝试使用Arquillian进行一些单元测试,但是我无法找到使用Maven部署时失败的原因.

这是班级考试:

package com.ndeveloper.spec.test;

import javax.inject.Inject;

import junit.framework.Assert;

import org.jboss.arquillian.container.test.api.Deployment;
import org.jboss.arquillian.junit.Arquillian;
import org.jboss.shrinkwrap.api.ArchivePaths;
import org.jboss.shrinkwrap.api.ShrinkWrap;
import org.jboss.shrinkwrap.api.asset.ByteArrayAsset;
import org.jboss.shrinkwrap.api.spec.JavaArchive;
import org.junit.Test;
import org.junit.runner.RunWith;

import com.ndeveloper.spec.controller.GreetingBean;

@RunWith(Arquillian.class)
public class GreetingBeanTest {

@Inject
GreetingBean greetingBean;

@Deployment
public static JavaArchive createTestArchive()
{
    return ShrinkWrap.create( JavaArchive.class,"test.jar").
            addClass(GreetingBean.class).addAsManifestResource(
                    new ByteArrayAsset("<beans/>".getBytes()),
                    ArchivePaths.create("beans.xml"));

}

@Test
public void testInjection(){
    Assert.assertEquals("Hello World", greetingBean.getGreeting());     
}
}
Run Code Online (Sandbox Code Playgroud)

我正在使用jboss jboss-javaee6-webapp原型.奇怪的是,最初的测试工作得很好......但是使用了几次之后.出现以下错误:

测试错误:com.ndeveloper.spec.test.GreetingBeanTest:无法获取MBeanServerConnect:service:jmx:rmi:/// jndi/rmi://127.0.0.1:1090/jmxrmi

万无一失的报告说如下:

-------------------------------------------------------------------------------
Test set: com.ndeveloper.spec.test.GreetingBeanTest
-------------------------------------------------------------------------------
Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 1.309 sec …
Run Code Online (Sandbox Code Playgroud)

java unit-testing java-ee-6 ejb-3.1 jboss-arquillian

9
推荐指数
1
解决办法
2万
查看次数

在同一个JUnit测试中使用Arquillian和PowerMock

我想在同一个JUnit 4测试中使用Arquillian和PowerMock的功能.

问题是两个产品都是Runner应该使用的JUnit @RunWith,并且不可能@RunWith在同一个测试类上使用多个,或者将多个Runners类放在同一个@RunWith注释中.

你知道怎么办?

junit unit-testing powermock jboss-arquillian

9
推荐指数
1
解决办法
4104
查看次数

在IntelliJ中调试Arquillian测试

我有Java EE项目,我在JBoss 7(Windows)上使用JUnit进行Arquillian测试.测试工作正常,但我无法调试它们.

从我用Google搜索(https://community.jboss.org/wiki/WhyDontBreakPointsWorkWhenDebugging)我知道Arquillian测试正在单独的VM中运行,因此IntelliJ无法调试它们.我需要IntelliJ通过socket远程连接到那台机器,但我不知道该怎么做.

我找到了这个帖子:在IntelliJ中使用Arquillian进行调试 - 托管容器但是我不知道如何让它工作.

我也跨过了这个帖子:http://devnet.jetbrains.com/message/5253623?tstart = 0所以我希望在我的pom.xml中填充appropriet surefire部分,但它没有帮助:

<plugin>
    <artifactId>maven-surefire-plugin</artifactId>
        <version>2.4.3</version>
        <configuration>
            <debugForkedProcess>true</debugForkedProcess>
        <skip>false</skip>
    </configuration>
 </plugin>
Run Code Online (Sandbox Code Playgroud)

请问有人如何在这样的配置中调试测试吗?

java junit unit-testing jboss-arquillian jboss7.x

9
推荐指数
1
解决办法
7176
查看次数

Arquillian:使用ShrinkWrap从现有战争中创建WebArchive

我正试图从Arquillian的另一个maven项目中部署现有的战争.我已经解决了战争并将其复制到我的Arquillian项目的目标目录中.

尝试在下面创建它:

@Deployment
public static WebArchive createDeployment() {

    return (WebArchive) ShrinkWrap.create(ZipImporter.class, "MyWarToTest.war").importFrom(
            new File("target/MyWarToTest.war"));

}
Run Code Online (Sandbox Code Playgroud)

但是,我得到了一个类强制转换异常.

引起:java.lang.ClassCastException:org.jboss.shrinkwrap.impl.base.importer.zip.ZipImporterImpl无法强制转换为org.jboss.shrinkwrap.api.Archive

我猜我应该尝试以不同的方式创造战争?

shrinkwrap jboss-arquillian

9
推荐指数
2
解决办法
8415
查看次数

显式本地EJB未使用Arquillian注入

我使用Arquillian来测试具有显式本地和远程接口的无状态会话bean.但是在测试中,Arquillian不会在具有本地接口类型的字段中"注入"任何内容,但它适用于远程接口.

@Stateless
public class TestServiceImpl implements TestServiceLocal, TestServiceRemote {
    public String greet() {
        return "hallo";
    }
}
Run Code Online (Sandbox Code Playgroud)

远程接口:

@Remote
public interface TestServiceRemote {
    public String greet();
}
Run Code Online (Sandbox Code Playgroud)

语言环境界面:

@Local
public interface TestServiceLocal {
    public String greet();
}
Run Code Online (Sandbox Code Playgroud)

这是测试:

@RunWith(Arquillian.class)
public class GenericEntityDaoEjbIntegrationTest {

    @Deployment
    public static JavaArchive createTestArchive()
                  throws UnsupportedEncodingException {
        return ShrinkWrap.create(JavaArchive.class, "test.jar")
                .addClasses(
                        TestServiceLocal.class,
                        TestServiceRemote.class,
                        TestServiceImpl.class);
    }

    @EJB
    private TestServiceLocal testServiceLocal;

    @EJB
    private TestServiceRemote testServiceRemote;

    //Will Fail
    @Test
    public void testTestServiceLocal() {
        assertNotNull(this.testServiceLocal);
    }

    //Success    
    @Test
    public void …
Run Code Online (Sandbox Code Playgroud)

java testing java-ee java-ee-6 jboss-arquillian

8
推荐指数
2
解决办法
9416
查看次数

如何使用Arquillian测试登录/身份验证 - Java EE 7

我们有一个Java EE 7应用程序并使用Arquillian来测试东西.现在我们要检查当前登录用户的一些权限.我的问题很基本,如何在测试用例中登录用户?我读过ProgrammaticLogin在arquillian测试嵌入式Glassfish,安全性和Arquillian问题上都没有用,但是没有明确回答.我目前的做法是这样的:

// Inject services etc.  

@Test
public void testLogin(){

    UserAccount user = new UserAccount();
    user.setUsername("bob");
    user.setPassword("bob");
    userAccountService.save(user);

    ProgrammaticLogin pl = new ProgrammaticLogin();
    String realmName = "secureJDBCRealm";
    try {
        pl.login("bob", "bob".toCharArray(), realmName, true);
    } catch (Exception e){
        e.printStackTrace();
    }
}
Run Code Online (Sandbox Code Playgroud)

现在当我尝试运行它时,得到一个LoginException,声称我没有为"fileRealm"配置LoginModule.但是"fileRealm"不是我正在寻找的领域(我把它放在那里进行第一次测试,但后来我将其改为"secureJDBCRealm",这是我们为GlassFish定制的安全领域).我们arquillian-glassfish-embedded-3.1用于测试.

  • 有谁知道在哪里定义Arquillian王国?
  • 为什么我的应用程序一直在寻找fileRealm?这是默认值吗?(在这里找不到任何规格)

java glassfish-embedded jboss-arquillian java-ee-7

8
推荐指数
1
解决办法
1541
查看次数

如何在Hibernate上从JPA手动调用create-drop?

我需要这个进行集成测试.我的环境是JBoss 7,在Hibernate 4上使用JPA的EJB3,H2内存数据库和测试由Arquillian运行.我希望能够删除数据库并再次创建它将基于所有表persistence.xml和实体.我知道我可以在应用程序开始时通过指定:

<property name="hibernate.hbm2ddl.auto" value="create-drop" /> 
Run Code Online (Sandbox Code Playgroud)

但是我需要在第一次删除后从代码中手动执行此操作并创建发生.

可能吗?什么是最简单的方法?

java hibernate jpa jboss-arquillian

8
推荐指数
1
解决办法
4430
查看次数

Maven(surefire)测试插件排除不起作用

我在我的pom.xml中有以下配置

<build>
  <plugins>
      <plugin>
          <artifactId>maven-surefire-plugin</artifactId>
          <version>2.17</version>
          <configuration>
              <excludes>
                  <exclude>**/DocumentChangeSubscriberTest.java</exclude>
              </excludes>
          </configuration>
      </plugin>
      (...)
Run Code Online (Sandbox Code Playgroud)

DocumentChangeSubscriberTest是一个arquillian测试,我想只在指定的配置文件中运行.当我键入mvn install所有测试时,即使DocumentChangeSubscriberTest我想要排除.如何从默认(匿名)配置文件中排除测试?

我试过<includes><include>...,它工作正常 - 只包括测试运行.

我看到maven surefire测试插件运行测试,即使它们被排除在外:但这对我不起作用.我也试过很多maven-surefire-plugin没有结果的版本.有任何想法吗?

java maven jboss-arquillian

8
推荐指数
3
解决办法
9035
查看次数

Arquillian - 程序化配置

我正在使用Arquillian和使用TestNG的嵌入式glassfish 3.1.2.2编写集成测试.我希望能够并行运行这些测试,对于这种情况,我需要动态配置glassfish端口和数据库名称(我们已经有了这个设置,我想重用它的arquillian测试).我缺少的是一个'before container start'钩子,在那里我可以准备数据库,查找空闲端口并更新我的glassfish配置(domain.xml,也可以是glassfish-resources.xml).是否有一个"干净"的解决方案,或Arquillian开发人员没有预见到我的用例?

我目前解决它的hacky方法是覆盖arquillian的beforeSuite方法,但是这个方法被调用两次 - 在测试启动时然后在容器中(因此我可怜的静态标志).其次,这个解决方案不适用于基于JUnit的测试,因为在套件之前无法拦截arquillian:

public class FullContainerIT extends Arquillian {

    private static boolean dbInitialized;

    //@RunAsClient <-supported by @Test only
    @Override
    @BeforeSuite(groups = "arquillian", inheritGroups = true)
    public void arquillianBeforeSuite() throws Exception {
        if (dbInitialized == false) {
            initializeDb();
            dbInitialized = true;
        }
        super.arquillianBeforeSuite();
    }
}
Run Code Online (Sandbox Code Playgroud)

我有一些想法:
+ @BeforeSuite @RunAsClient似乎是我需要的,但@RunAsClient仅支持@Test;
+我org.jboss.arquillian.container.spi.event.container.BeforeStartArquillian JavaDocs中看过事件 ,但我不知道如何听Arquillian事件;
+我已经看到有可能@Deployment创建一个ShrinkWrap描述符,但这些不支持Glassfish资源.

testng glassfish glassfish-embedded jboss-arquillian

8
推荐指数
1
解决办法
1011
查看次数

@BeforeClass注释在远程服务器上使用Arquillian时调用方法两次

我们正在从使用带有嵌入式JBoss的TestNG过渡到使用带有远程服务器的Arquillian.

我们正在运行一个简单的测试,它有一个用@BeforeClass注释的方法,可以进行一些测试设置.经过大量挖掘后,看起来安装方法被调用了两次:一次是在我们执行Maven命令的控制台上运行测试,再次将测试战部署到我们的远程服务器并运行测试时.这是两个独立的JVMS - 一个在容器外运行,另一个在容器内运行.我倾向于让后者运行.

这是我应该期待的行为还是我可能会遗漏的东西?

现在,我们实际上正在检查我们是否在容器中,如果是,我们运行我们的设置代码.这有效,但我想知道是否有更好的方法.

我们的代码的一些片段(请忽略代码的简单性以及这里不需要setupComponents方法的事实,我们正在迁移需要此功能的更复杂的测试):

public class BaseTest extends Arquillian
{
    private static Log log = LogFactory.getLog( SeamTest.class );

    @Deployment
    public static Archive<?> createDeployment()
    {
        // snip... basically, we create a test war here
    }

    /**
     * todo - there might be a better way to do this
     */
    private boolean runningInContainer()
    {
        try
        {
            new InitialContext(  ).lookup( "java:comp/env" );
            return true;
        }
        catch (NamingException ex)
        {
            return false;
        }
    }

    @BeforeClass
    public void setupOnce() throws Exception
    { …
Run Code Online (Sandbox Code Playgroud)

java testng jboss jboss-arquillian

7
推荐指数
1
解决办法
2211
查看次数