我正在尝试测试我的网络服务。此Web服务使用带有jpa的ejb来检索其数据。所以我想使用arquillian扩展来完成这项工作。
这是我的arquillian测试类:
@RunWith(Arquillian.class)
public class PersonWebServiceIT {
private PersonWebService service;
@Deployment(testable = false)
public static Archive<?> createDeployment() {
return ShrinkWrap
.create(ZipImporter.class, "test.ear")
.importFrom(new File("simple-webservice-ear-1.0.0-SNAPSHOT.ear"))
.as(EnterpriseArchive.class);
}
@Test
@UsingDataSet("dataset.yml")
@SneakyThrows
public void testFindPersons(@ArquillianResource final URL deploymentUrl) {
loadService(deploymentUrl);
Assert.assertEquals(2, service.findPersons().size());
}
private void loadService(final URL deploymentUrl)
//load webservice
}
}
这是我的datasets / dataset.yml文件:
person:
- id: 1
firstName: "stijn"
- id: 2
firstName: "cremers"
我的arquillian.xml:
<?xml version="1.0" encoding="UTF-8"?>
<arquillian xmlns="http://jboss.com/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">
<extension qualifier="persistence">
<property name="defaultDataSource">java:/DefaultDS</property>
</extension>
</arquillian>
我的测试数据永远不会被加载。我甚至尝试使用格式错误的yml文件,但即使这样我也没有错误。
答案 0 :(得分:0)
问题在于您的测试运行模式。当您使用属性@Deployment
定义testable=false
时,所有测试都在客户端模式下运行,即它们不在容器中运行。
Arquillian Persistence Extension(自1.0.0.Alpha5起)不支持在客户端模式下运行测试;目前仅支持容器内测试。 APE中的客户端模式测试支持可能会在将来的版本中提供。
答案 1 :(得分:0)
<property name="defaultDataSource">java:/DefaultDS</property>
您正在指定服务器中定义的数据源。
在客户端模式下,测试用例在Container外部运行(即其他JVM)
因此,只有持久性扩展才能使用数据源,因此您无法使用arquillian持久性扩展客户端模式。
如果无论如何都要在arquillian.xml文件中指定jdbc url而不是datasource name。那么你可以使用持久性扩展