arquillian持久性扩展不起作用

时间:2013-02-04 20:10:26

标签: persistence jboss-arquillian

我正在尝试测试我的网络服务。此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文件,但即使这样我也没有错误。

2 个答案:

答案 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。那么你可以使用持久性扩展