我正在尝试使用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。
非常感谢任何帮助。
答案 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的定义。