src\test\resources
で提供されているリソースではなく、 で提供されているリソースを単体テストで使用するのに問題がありsrc\main\resources
ます。はい、問題のリソースは両方の場所で同じ名前です。
私はかなりの量の調査を行い、次のような StackOverflow の投稿を調べました。
しかし、この基本的な問題は私を困惑させました。
私は非常に標準的な Maven Java プロジェクトをセットアップしています。
- 以下のアプリケーションソースとリソース
src\main
- ソースとリソースのテスト
src\test
Eclipse (M2Eclipse プラグインのおかげ) のビルド パスには、、、およびsrc\main\java
すべてがあります。src\main\resources
src\test\java
src\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に別のファイル名を探すように指示することです。