1

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

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

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

所以我可能需要做的是注入根资源类,哪个持久化单元应该用于实例化EntityManager,然后在我运行测试时有一些方法注入unittest,否则注入默认值。但我想不出任何好的方法来做到这一点。

我是 Java EE 开发的新手,这可能很明显。

有什么帮助吗?

4

2 回答 2

2

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

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

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

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

编辑:

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

于 2010-08-20T11:28:40.820 回答
0

你在使用 Maven 吗?如果是,那么有一个技巧可以让您“读取”Java 类中的 POM 值。这对我来说非常有用,你只需要在你的 POM 中设置你的 Persistence Unit Name,在测试期间设置一个不同的名称,就是这样。

java上下文中的Maven变量

于 2010-08-20T10:47:56.923 回答