src\test\resourcesで提供されているリソースではなく、 で提供されているリソースを単体テストで使用するのに問題がありsrc\main\resourcesます。はい、問題のリソースは両方の場所で同じ名前です。
私はかなりの量の調査を行い、次のような StackOverflow の投稿を調べました。
しかし、この基本的な問題は私を困惑させました。
私は非常に標準的な Maven Java プロジェクトをセットアップしています。
- 以下のアプリケーションソースとリソース
src\main - ソースとリソースのテスト
src\test
Eclipse (M2Eclipse プラグインのおかげ) のビルド パスには、、、およびsrc\main\javaすべてがあります。src\main\resourcessrc\test\javasrc\test\resources
このセットアップでは、Eclipse 内から単体テストを実行すると、リソース ファイルsrc\main\resourcesが参照されます。理由はわかりますが (ビルド パスにあるため)、それを防ぐ方法がわかりません。単体テスト構成パネルでは、(デフォルトの) クラスパス コンポーネントの順序を微調整できません。
自分のテストを Eclipse から実行できないことを大げさに言ったとしても、Maven もうまく動作しません。processResourcesこのステップで、すべてのテスト リソースがtarget\test-classesツリーの下にコピーされていることがわかります。ただし、単体テストが実行されると、下にあるリソース ファイルのコピーがtarget\classes参照されます。
確かに私は明らかな何かを見落としています。あなたが提供できる助けに感謝します。
[編集]さらに追加(おそらく関連情報):
問題のリソース ファイルは、persistence.xml. これは、リレーショナル データ ソースに接続するためにEclipselinkによって使用されます。アプリケーションが使用するファイルのバージョンは、src\main\resources\META-INF. Maven ビルド (WAR など) は、META-INFディレクトリをディレクトリの下に配置しclassesます。したがって、EclipseLink ツールはこのファイルを検出します。
src/main
|
+ -- java/com/company/ProductDao.java
|
+ -- resources/META-INF/persistence.xml (Requires application container)
|
src/test
|
+ -- java/com/company/ProductDaoTest.java
|
+ -- resources/META-INF/persistence.xml (out of container for unit tests)
|
ここでのポイントは次のとおりです。EclipseLink は、クラスパス上のディレクトリでpersistence.xml呼び出さMETA-INFれるファイルを必要とします(はい、デフォルトはオーバーライドできますが、そこには行きません)。
したがって、単体テストが実行されると、同じアプリケーション ロジックが呼び出されます。ただし、ファイルのバージョンはsrc\main\resources使用できません。別のバージョンがsrc\test\resourcesディレクトリで使用可能になります。
のバージョンがsrc\main\resources使用されているため、私の唯一の手段は、単体テスト中にEclipselinkに別のファイル名を探すように指示することです。