我想用Arquillian测试Java EE应用程序。一个简单的设置是将一些测试类放到由Arquillian管理的服务器上进行测试。
现在,我想使用在构建过程中构建的EAR文件。随着
@Deployment
public static EnterpriseArchive createDeployment() {
File earFile = ...
EnterpriseArchive archive = ShrinkWrap.createFromZipFile(EnterpriseArchive.class, earFile);
return archive;
}
我可以通过Arquillian将EAR放到JBoss。我看到部署,部署期间没有错误。只有Arquillian返回一个错误,它无法找到测试类,这显然是可以的。
现在问题是将测试类放在哪里。我可以将测试类放入由Arquillian输入到EAR的test.war中,但是我得到了一个未发现ArquillianServletRunner的异常。当我将测试类作为模块或库放入JAR文件时,当作为模块放置时,找不到测试类,或者由于依赖性问题而将放入作为库时,注入不起作用。
我必须把测试类放到???
我的arquillian.xml:
<?xml version="1.0" encoding="UTF-8"?>
<arquillian xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://jboss.org/schema/arquillian"
xsi:schemaLocation="http://jboss.org/schema/arquillian http://jboss.org/schema/arquillian/arquillian_1_0.xsd">
<defaultProtocol type="Servlet 3.0" />
<container qualifier="jboss7" default="true">
<configuration>
<property name="jbossHome">${cargo.dir}/jboss-as-dist-7.1.1.Final/jboss-as-7.1.1.Final</property>
</configuration>
</container>
<engine>
<property name="deploymentExportPath">target/deployments</property>
</engine>
</arquillian>
答案 0 :(得分:1)
您可以使用@Deployment(testable = false)在客户端运行测试类,但这样做的缺点是您目前无法使用持久性扩展(可能还有其他)。
我的示例代码:
@RunWith(Arquillian.class)
public class PersonWebServiceIT {
private PersonWebService service;
@Deployment(testable = false)
public static Archive<?> createDeployment() {
return ShrinkWrap
.create(ZipImporter.class, "test.war")
.importFrom(
new File("simple-webservice-1.0.0-SNAPSHOT.war"))
.as(WebArchive.class);
}
@Test
public void testFindPersons(@ArquillianResource URL deploymentUrl) {
....
}
}
答案 1 :(得分:0)
将测试类放入耳中的战争对我有用
WebArchive war = ear.getAsType(WebArchive.class, "/mywarname.war");
war.addClass(MyTestClass.class);
答案 2 :(得分:0)
当我处理现有的EAR时,我更喜欢将运行测试的WAR与我在特殊JAR中放入的实际测试以及其他测试EJB分开。我已经发布了一个示例,如何在类似问题下进行必要的application.xml
操作:https://stackoverflow.com/a/17036383/1667977