2011-07-29 6 views
0

私のユニットテストの1つは、src/test/resources/testData.txtに格納されたテストデータによって駆動されます。 Mavenはsrc/test/resourcesの内容をクラスパス上にあるtarget/test-classes/にコピーするので、絶対パス名を気にせずにクラスパスからそのファイルを読み込むことができます。ここまでは順調ですね。Mavenプロジェクトでリソースのパスを取得するポータブルな方法はありますか?

私はリモートシステムからデータを取得してそのファイルを更新するいくつかのコードを利用しています。そのコードはほとんど実行されず、ビルドの一部として実行されることはありません。更新されたファイルはソースリポジトリにコミットされます。ファイルに追加するには、元のファイルへのパスをsrc/test/resourcesにしておく必要があります(このファイルへの追加は、明らかにうまくいきません。target/test-classes/)。

そのパスを移植可能な方法で特定するにはどうすればよいですか?これらのディレクトリ名が実際に変更される可能性があるので、むしろ難しいコードsrc/test/resources/を書いています。また、これは、プロジェクトのベースディレクトリ以外の現在の作業ディレクトリで実行すると壊れてしまいます。

アイデア?

答えて

2

おそらく最も良い方法は${project.basedir}/src/test/resourcesです。テストリソースディレクトリは変更されることはなく、作業ディレクトリに関係なく正しいパスに安全に解決されます。プロパティを介してテストリソースディレクトリを参照しようとすると、複数のテストリソースが定義されていることがあります。どちらを選ぶかをどのように知っていますか?

+0

私が正しく理解しているかわかりません。 '$ {project.basedir}/src/test/resources'は問題ありませんが、' $ {project.basedir} 'の値を自分のコードからどうやって解決するのですか? –

+1

通常、 'myFile.path = $ {project.basedir}/src/test ...'のような行でテストの横にプロパティファイルを作成し、[プロパティをフィルタする](http:/maven.apache.org/plugins/maven-resources-plugin/examples/filter.html)をビルド時に実行し、正しいパスをmavenでプラグインしています。 –

+0

Ryanさん、ありがとうございました。しかし、それはPOMに加えてビルド構成を含む別のファイルを維持することを意味します。可能であれば避けたいのですが。あなたの提案からインスピレーションを得て、私は私が個人的に好む別の解決策を見つけました。 –

0

これは、テスト実行時に環境変数として${project.basedir}を公開するようにsurefireプラグインを設定することをお勧めします。ユニットテストは、必要に応じて環境からその情報を読み取ることができます。これは、POM内のすべての設定を保持し、そのパスがこれまでに変更する必要があります何の変更を必要としません:

<build> 
    <plugins> 
     ... 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-surefire-plugin</artifactId> 
      ... 
      <configuration> 
       ... 
       <environmentVariables> 
        <maven.project.basedir>${project.basedir}</maven.project.basedir> 
       </environmentVariables> 
      </configuration> 
     </plugin> 
     ... 
    </plugins> 
</build> 

他のソリューションは、に${project.basedir}/src/test/resources/を追加する(ライアンにより示唆されるように)リソースフィルタリングを使用するか、確実なプラグインを構成することによって実装することができクラスパス。

+0

明確にするために、私が私の答えで示唆したことは、POM内のすべての構成を維持することができます。かなり標準的なプロパティファイルを使用してテストに公開します。プロパティファイルに実際の値があるかどうか、または完全にmavenのプロパティプレースホルダーで構成されているかどうかはあなた次第です。プロパティーファイルの主な目的は、構成の方法としてJavaフレームワークにかなり遍在していることです。何でもプロパティーファイルを読むことができます。 –

関連する問題