@Steve Cと@ ashosborne1が提供するオプションには違いと制約があります。特定する必要があると思います。
いつ使用できますFile resourcesDirectory = new File("src/test/resources");
か?
- 1テストがmaven経由でのみ実行され、IDE経由では実行されない場合。
- 2.1テストがmavenまたは
- 2.2 IDE経由で、1つのプロジェクトのみがIDEにインポートされます。(IntelliJ IDEAで使用されているため、「インポート」という用語を使用しています。EclipseのユーザーもMavenプロジェクトをインポートすると思います)。これは機能します。IDE経由でテストを実行すると、作業ディレクトリがプロジェクトと同じになります。
- 3.1テストがmavenまたは
- (あなたは、あなたは通常、いくつかのプロジェクトをインポートする学生でない場合)、IDE、および複数のプロジェクトを経由して3.2 IDEにインポートされている、とあなたはIDEを経由してテストを実行する前に、手動で設定し、あなたのテストのための作業ディレクトリ。その作業ディレクトリは、テストを含むインポートされたプロジェクトを参照する必要があります。デフォルトでは、IDEにインポートされたすべてのプロジェクトの作業ディレクトリは1つだけです。おそらくそれ
IntelliJ IDEA
だけの制限ですが、すべてのIDEはこのように動作すると思います。そして、手動で行わなければならないこの構成は、まったく良くありません。異なるmavenプロジェクトに存在するが、1つの大きな「IDE」プロジェクトにインポートされたいくつかのテストで作業する場合は、これを覚えさせ、リラックスして作業を楽にすることはできません。
@ ashosborne1が提供するソリューション(個人的には私が好む)は、テストを実行する前に実行する必要がある2つの追加要件を必要とします。このソリューションを使用する手順のリストは次のとおりです。
「src / test / resources /」内にテストフォルダー(「teva」)とファイル(「readme」)を作成します。
src / test / resources / teva / readme
ファイルはテストフォルダーに作成する必要があります。作成しないと機能しません。Mavenは空のフォルダーを無視します。
少なくとも1回、を介してプロジェクトをビルドしmvn clean install
ます。テストも実行します。プロジェクト全体をビルドせずに、Mavenを介してテストクラス/メソッドのみを実行するだけで十分な場合があります。結果として、テストリソースがテストクラスにコピーされます。パスは次のとおりです。target/test-classes/teva/readme
その後、@ ashosborne1によってすでに提供されているコードを使用してフォルダーにアクセスできます(申し訳ありませんが、このアイテムのリスト内でこのコードを正しく編集できなかったためです)。
public static final String TEVA_FOLDER = "teva"; ...
URL tevaUrl = YourTest.class.getClassLoader().getResource(TEVA_FOLDER);
String tevaTestFolder = new File(tevaUrl.toURI()).getAbsolutePath();
これで、IDEを使用して何度でもテストを実行できます。mvn cleanを実行するまで。ターゲットフォルダをドロップします。
IDEを介してテストを実行する前に、テストフォルダー内にファイルを作成してmavenを初めて実行する必要があります。これらの手順がない場合、IDEでテストリソースを作成し、テストを記述してIDE経由でのみ実行すると、エラーが発生します。mvnを介してテストを実行すると、テストリソースがtarget / test-classes / teva / readmeにコピーされ、クラスローダーからアクセスできるようになります。
IDEに複数のMavenプロジェクトをインポートする必要があるのはなぜでしょうか。私にとって、主な動機の1つは、IDA関連のファイルをコードから遠ざけることです。まずIDEで新しいプロジェクトを作成します。これは偽のプロジェクトで、IDE関連のファイルを保持しているだけです。次に、既存のMavenプロジェクトをインポートします。これらのインポートされたプロジェクトに、IDEAファイルを元の偽のプロジェクトのみに保存するように強制します。その結果、コードにIDE関連のファイルが表示されません。SVNはそれらを表示すべきではありません(そのようなファイルを無視するようにsvn / gitを構成するように提案しないでください)。また、とても便利です。