试图为耳朵运行Arquillian测试并找不到ArquillianServletRunner

时间:2015-02-27 18:01:06

标签: jboss-arquillian

我正在尝试使用Arquillian进行测试。我创建导入现有耳朵的部署,然后在我的测试中添加一个Web存档模块。

@RunWith(Arquillian.class)
public class MyTest {
    @Deployment
    public static Archive createDeployment() {
        EnterpriseArchive ear = ShrinkWrap.createFromZipFile(EnterpriseArchive.class , new File("/location/to/my/ear") );
        WebArchive arc = Testable.archiveToTest( ShrinkWrap.create(WebArchive.class, "MyTest.war").addClass(MyTest.class).addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml") );
        return ear.addAsModule( arc );
    }
    ....
}

我使用JBoss EAP 6.3.0作为我的容器(托管)

<?xml version="1.0" encoding="UTF-8"?>
<arquillian xmlns="http://jboss.org/schema/arquillian"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
    http://jboss.org/schema/arquillian
    http://jboss.org/schema/arquillian/arquillian_1_0.xsd">

    <defaultProtocol type="Servlet 3.0" />

    <container qualifier="jbossas-managed" default="true">
        <configuration>
        </configuration>
    </container>
</arquillian>

在我的pom.xml中

<dependencies>
    <dependency>
        <groupId>org.jboss.arquillian.junit</groupId>
        <artifactId>arquillian-junit-container</artifactId>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.8.1</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.jboss.spec</groupId>
        <artifactId>jboss-javaee-6.0</artifactId>
        <version>1.0.0.Final</version>
        <type>pom</type>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>org.jboss.as</groupId>
        <artifactId>jboss-as-arquillian-container-remote</artifactId>
        <version>7.2.0.Final</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.jboss.arquillian.protocol</groupId>
        <artifactId>arquillian-protocol-servlet</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>

当我运行测试时,我得到以下异常

java.lang.IllegalArgumentException:找不到ArquillianServletRunner。无法从ProtocolMetadata确定ContextRoot,请联系DeployableContainer开发人员。     在org.jboss.arquillian.protocol.servlet.ServletUtil.determineBaseURI(ServletUtil.java:64)     在org.jboss.arquillian.protocol.servlet.ServletURIHandler.locateTestServlet(ServletURIHandler.java:60)

我已经验证部署的耳朵包含MyTest.war模块以及耳朵的lib文件夹中与arquillian相关的jar。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

当它被配置为使用servlet 3.0协议时,Arquillian在web.xml或web-fragment.xml中定义servlet ArquillianServletRunner,并将arquillian-protocol.jar包含到test.war中,并将其作为ear的模块返回在您的情况下通过createDeployment函数。

也许您可以包含该arquillian的库并将servlet定义到MyTest.war的web.xml中。 web-fragment.xml看起来像this,从中获取servlet定义。

您还可以将engine / deploymentExportPath添加到arquillian.xml中,以保存arquillian部署的最终存档。请参阅导出部署一节中的更多here

PD:有人说当你添加一个webInfResource条目但是我没有探测它时,没有出现servlet的定义。