我如何为我的每个 arquillian 测试生成一个 persistence.xml ?

How can I generate a persistence.xml tailored for each of my arquillian tests?

我正在学习 Arquillian 看看我是否可以添加到它的项目中。

我能够创建测试并部署 "static" 测试-persistence.xml,类似于 this tutorial

我的问题是我的真实 persistence.xml 有不同的映射 () 和实体 ()。为了让我的测试工作,我必须:

  1. 将所有 类 和映射添加到 persistence.xml,这将导致每个测试都必须将所有实体和映射插入到包中,并且会增加测试持久性的维护成本。 xml/tests 当新 entities/mappings 添加到系统时
  2. 以某种方式将 mappings/entities 即时添加到我的持久性单元
  3. 在创建要部署的包之前预先生成 persistence.xml
  4. 每个测试用例有一个persistence.xml

选项 4 不可行,因为它无法维护。 备选方案 1 是可行的,但我想让我的构建更小。 我尝试了 2 和 3,但我找不到任何方法(我正在使用 JavaEE、JPA 2.0 和 Hibernate)来制作它们中的任何一个。似乎 Hibernate 不支持即时添加 entities/mappings 并且 Archive.AddAsResource 只接受路径,而不是 "file content" 或类似的东西。

我认为这是使用 Arquillian 进行测试时的常见问题。我如何构建我的 persistence.xml 使其只包含我的测试所需的东西?

为您的 persistence.xml 创建一个测试版本,将其作为单独的文件存储在您的源代码树中,并让 ShrinkWrap 将其作为文件资产添加到您的测试档案中。

return ShrinkWrap.create(JavaArchive.class)  
             .addAsManifestResource(new FileAsset(new File("src/test/resources/META-INF/test-persistence.xml")), "persistence.xml");