質問
ファイルパーサークラスのテストを書いています。解析メソッドはパラメーターとしてファイル名を受け取り、解析するためにそれを開く必要があります(duh)。
テストファイルを作成し、それをプロジェクトディレクトリ内のtest / resourcesディレクトリに入れました。このファイルを渡して解析をテストします。このプロジェクトはCVSにあり、他の人が操作するため、ファイルパスをハードコーディングすることはできません。そのため、テストでファイル名を作成するためにmaven $ {basedir}プロパティを使用することを考えました。次のようなもの:
public void parseTest() {
...
sut.parse( ${basedir} + "src/test/resources/testFile" );
...
}
これを達成する方法を誰かが知っていますか?
解決
2つのオプションがあります:
1)システムプロパティ(ドキュメント)
pomで次のようなことができます:
<project>
[...]
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.4.2</version>
<configuration>
<systemProperties>
<property>
<name>filePath</name>
<value>/path/to/the/file</value>
</property>
</systemProperties>
</configuration>
</plugin>
</plugins>
</build>
[...]
</project>
テストで実行できること:
System.getProperty("filePath");
2)テストクラスと同じパッケージの下のsrc / test / resources内にファイルを配置します。その後、Class.getResourceAsStream(String fileName)(ドキュメント)。
オプション1よりもオプション2を強くお勧めします。システムプロパティを介してテストに物事を渡すことは、非常に汚いIMOです。テストをテストランナーに不必要に結合し、今後の頭痛の種になります。クラスパスからファイルをロードすることが道であり、それがmavenがリソースディレクトリの概念を持っている理由です。
所属していません StackOverflow