0

我正在尝试测试我的网络服务。此 Web 服务使用 ejb 和 jpa 来检索其数据。所以我想使用 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 文件,但即便如此我也没有收到任何错误。

4

2 回答 2

0

问题在于您的测试运行模式。当您@Deployment使用属性定义时testable=false,所有测试都在客户端模式下运行,即它们不在容器内运行。

Arquillian Persistence Extension(从 1.0.0.Alpha5 开始)不支持在客户端模式下运行测试;目前仅支持容器内测试。未来版本中可能会支持 APE 中的客户端模式测试。

于 2013-02-05T07:34:01.117 回答
0
<property name="defaultDataSource">java:/DefaultDS</property>

您正在指定服务器中定义的数据源。

在客户端模式下,测试用例在容器之外运行(即其他 JVM)

所以只有持久化扩展不能使用数据源,因此你不能使用 arquillian 持久化扩展客户端模式。

如果无论如何要在 arquillian.xml 文件中指定 jdbc url 而不是数据源名称。那么你可以使用持久性扩展

于 2013-02-20T05:10:30.243 回答