1

OpenJPA 2.0.0、Jersey 1.3、およびJUnit4.8.1を使用してアプリケーションを構築しています。

「default」と「unittest」という2つの異なる永続性ユニットがpersistence.xmlで定義されるように設定しました。デフォルトはOracleインスタンスに接続するように設定されていますが、unittestはローカルのH2DB組み込みデータベースファイルに接続するように設定されています。これを行うのは、ユニットテストを実行するたびに上書きできる特定の既知のデータを含むクリーンなデータベースで常に単体テストを開始するためです。

問題は、プログラムの下位層だけでなく、JerseyTestingFrameworkを使用して実際のWebサービスをテストしたいということです。私のルートリソースクラスは、unittest永続性ユニットをロードしません。常にデフォルトをロードします。

したがって、おそらく私がする必要があるのは、EntityManagerをインスタンス化するために永続ユニットを使用する必要があるルートリソースクラスに注入し、テストの実行時にユニットテストを注入する方法がありますが、それ以外の場合はデフォルトを注入しますしかし、私はそれを行うための良い方法を考えることができません。

私はJavaEE開発にまったく慣れていませんが、それは明らかかもしれません。

何か助けはありますか?

4

2 に答える 2

2

src / test / resources/META-INFに2番目のpersistence.xmlを作成できるはずだと思います。

私が物事を正しく理解していれば、mavenはtarget/test-classesをtarget/classesの前にクラスパスに配置するので、単体テストでは、testpersistence.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に設定するだけで、テスト中に別の名前を設定するだけで済みます。

JavaコンテキストでのMaven変数

于 2010-08-20T10:47:56.923 に答える