java - OpenJPA、 Jersey 、JUnit : Using a different persistence unit for my unit tests?

标签 java dependency-injection junit jersey openjpa

我正在使用 OpenJPA 2.0.0、Jersey 1.3 和 JUnit 4.8.1 构建应用程序。

我已经设置了它,因此我在 persistence.xml 中定义了两个不同的持久性单元:“default”和“unittest”。默认设置为连接到 Oracle 实例,而 unittest 设置为连接到本地 H2DB 嵌入式数据库文件。我这样做是为了始终使用一个干净的数据库开始单元测试,该数据库中包含某些已知数据,这些数据可以在每次运行单元测试之间被覆盖。

问题是,现在我想使用 Jersey 测试框架来测试我的实际 Web 服务,而不仅仅是程序的较低层。我的根资源类不加载unittest持久性单元,它们总是加载默认单元。

所以我可能需要做的就是注入(inject)根资源类哪个持久性单元应该用于实例化EntityManager,然后在运行我的程序时通过某种方式注入(inject)unittest测试但否则注入(inject)默认值。但我想不出有什么好的方法来做到这一点。

我对 Java EE 开发是全新的,这可能是显而易见的。

有什么帮助吗?

最佳答案

我认为应该可以在 src/test/resources/META-INF 中创建第二个 persistence.xml。

如果我理解正确,maven 会将 target/test-classes 放在类路径中 target/classes 之前,这样在单元测试中,只会读取您的测试 persistence.xml。这样您就可以使用相同的持久性单元名称,但具有不同的配置。

src/main/resources/
    META-INF
        persistence.xml  <-- for actual application

src/test/resources/
    META-INF
        persistence.xml  <-- for unit tests

编辑:

哎呀,我被另一个答案欺骗相信你使用了maven。如果你不是,忘记我说的话......

关于java - OpenJPA、 Jersey 、JUnit : Using a different persistence unit for my unit tests?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3469922/

相关文章:

java - 如何使用 Rest Assured 在 Response API 中获取两个具有相同名称的不同字段?

javascript - 当在多个 Controller 之间使用依赖注入(inject)时,工厂内部的 $get 请求会触发两次吗?

android - 如何在kodein中使用带有两个参数的工厂绑定(bind)来恢复对象?

java - 测试 java 程序是否调用 System.exist - 不退出 Junit

java - 使用 spring 框架时,出现错误 - import org not found

java - Spring portlet mvc : @Valid does not seem to work

c# - 如何将依赖项传递给自定义 .NET Core ILoggerProvider

java - 我不知道为什么 junit 会出现此错误

java - Junit 测试失败且没有失败痕迹

java - Eclipse Java Oxygen 未启动