2010-08-12 47 views
1

我正在使用OpenJPA 2.0.0,Jersey 1.3和JUnit 4.8.1构建应用程序。OpenJPA,Jersey,JUnit:为我的单元测试使用不同的持久性单元?

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

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

所以我可能需要做的是注入其中持久单元应该用于实例化EntityManager的根资源类,然后有一些方法来注入单元测试时,我跑我的测试,但默认情况下注入除此以外。但我想不出有什么好办法做到这一点。

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

任何帮助?

+0

EntityManager或者说EntityManagerFactory来自哪里?你是通过调用Persistence.createEntityManagerFactory()来创建它,还是由某个框架注入?你没有提到你的问题中的任何一种框架。 – 2011-04-05 17:45:36

回答

1

我想应该是可以创造的src /测试/资源/ META-INF第二persistence.xml中。

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

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

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

编辑:

哎呀,我被欺骗,以为你被对方的回答中使用Maven的。如果你不是,忘记我所说的......

0

您使用的是Maven吗? 如果是的话,有一个技巧可以让你“读”你的Java类中的POM值。 这对我来说非常有用,您只需在您的POM中设置持久性单元名称,在测试过程中设置另一个名称,就是这样。

Maven variables in java context

相关问题