Junit、Jersey、Junit:ユニットテストに別の永続ユニットを使用していますか?

StackOverflow https://stackoverflow.com/questions/3469922

質問

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にあなたの永続的なユニット名を設定する必要があります、それはそれだけです。

JavaコンテキストのMaven変数

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top