如何定义两个持久性单元(一个用于生产,一个用于unit testing)?
这是我的无状态bean:
@Stateless public class Finder { @PersistenceContext(unitName = "production") EntityManager em; [...] }
它明确定义了持久性单元的名称是production
。 这个单元在persistence.xml
配置,一切都很好。 当我对这个类进行unit testing时,我必须使用另一个持久性单元,具有不同的属性和配置设置。 我该如何组织它? 在persistence.xml
创建另一个元素? 这有什么最佳实践吗?
我使用相同的持久性单元名称但不同的persistence.xml
文件(如果需要编辑代码以启用“测试模式”,您将如何自动化测试?)。
如果您仍在使用Maven,Maven支持本机配置文件的测试版本:
- “production”
persistence.xml
位于src/main/resources/META-INF
- “test”
persistence.xml
位于src/test/resources/META-INF
,用于测试。
我只是在
创建了另一个
元素。
您可以在配置中创建第二个持久性单元,但这并不一定意味着您应该这样做 。 多个PU当然是完全正确的,但是当它们专门用于不同的环境时,例如生产与测试,我就避免将它们混合起来。
在您的实例中,我有两个持久性配置文件,并选择Ant / Maven / build工具在适当时复制/重命名正确的。
我有类似的问题,我想提供另一种方法。 我想运行测试prod,但我不使用两个persistence.xml或代码修改。 我只有一个持久性单元,但不同的运行时环境(standalone.xml,Wildfly)。 假设我想要运行我的开发数据库,我使用测试运行时环境启动Wildfly。 当我想将它模拟为真实用户时,我会针对prod环境运行。 唯一的区别是standalone.xml中的数据源条目。 描述符总是相同的(例如myappDS,因此persistence.xml中的持久性单元声明也总是相同),但是在测试服务器中,数据源条目指向我的测试数据库,prod数据源条目指向我的prod数据库。