【发布时间】:2013-11-11 10:24:23
【问题描述】:
我的应用程序基于 playframework 并包含多个模块。
数据库交互通过 JPA 处理 (<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>)
我的任务是用单元测试覆盖这些模块之一。
不幸的是,在模块级提供单元测试的情况下运行“play test”命令会导致以下异常:
javax.persistence.PersistenceException: No Persistence provider for EntityManager named defaultPersistenceUnit
Persistence-Provider 在 conf/META-INF/persistence.xml 中全局定义(在模块之外) 将全局 persistence.xml 复制到模块并不能解决问题。
假设模块内没有其他测试,将测试放在模块之外(在全局测试目录中)并执行它们可以完美地工作。
谁能解释一下为什么会出现错误?有什么方法可以在模块级别进行支持 JPA 的测试?
提前致谢
你的
【问题讨论】:
-
我认为你得到的那个异常是因为它没有指定任何persistenceUnit。对于JUnit 项目需要调整另一个persistence.xml。全局 persisitence.xml 是使用 JTA 吗?您能向我们描述一下您的项目结构吗?
-
项目结构看起来像这样:Structure。 JPA 在全局 persitence.xml 中定义。如何为单元测试指定另一个 persistence.xml?
-
感谢您的结构。我认为全局persistence.xml 使用JTA。请确认!如果目标是在模块中进行测试,则需要使用相同的持久性上下文。也许这是可能的。但是在运行这些测试之前,我不知道运行这些测试和您的应用程序正在运行什么。我的问题是如何在您的 JUnit 测试中声明 EntityManger(或玩名作的功能)?可以分享一个例子吗?
-
嗨,herry,感谢您的回复,这是我的persistence.xml。不确定是否使用了 JTA。测试看起来像这样:Abstract.java, NavigationTest.java
标签: testing jpa junit playframework persistence.xml