Junit、Jersey、Junit:ユニットテストに別の永続ユニットを使用していますか?
-
28-09-2019 - |
質問
OpenJPA 2.0.0、Jersey 1.3、およびJunit 4.8.1を使用してアプリケーションを構築しています。
私はそれをセットアップしているので、私のpersistence.xmlで定義されている2つの異なる永続ユニットがあります:「デフォルト」と「Unittest」。デフォルトはOracleインスタンスに接続するように設定されていますが、UnittestはローカルH2DB埋め込みデータベースファイルに接続するように設定されています。これを行うので、特定の既知のデータが含まれているクリーンなデータベースで常にユニットテストを開始し、ユニットテストの各実行間で上書きすることができます。
問題は、プログラムの下層だけでなく、ジャージーテストフレームワークを使用して実際のWebサービスをテストしたいということです。私のルートリソースクラスは、最先端の永続性ユニットをロードせず、常にデフォルトをロードします。
だから私がおそらくする必要があるのは、ルートリソースクラスに注入することです どれの Persistenceユニットを使用して、EntityManagerをインスタンス化し、テストを実行しているときにUNITSTESTを注入する方法を挿入する方法を使用する必要がありますが、それ以外の場合はデフォルトを注入します。しかし、私はそれをする良い方法は考えられません。
私はJava EE開発にまったく新しいですが、これは明らかです。
何か助けがありますか?
解決
SRC/test/resources/meta-infで2番目の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を使用したと信じてだまされました。そうでない場合は、私が言ったことを忘れてください...
他のヒント
Mavenを使用していますか?はいの場合、JavaクラスでPOM値を「読み取る」ことができるトリックがあります。それは私にとって非常に便利でした。あなたはあなたのPOMにあなたの永続的なユニット名を設定する必要があります、それはそれだけです。