質問

ファイルパーサークラスのテストを書いています。解析メソッドはパラメーターとしてファイル名を受け取り、解析するためにそれを開く必要があります(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がリソースディレクトリの概念を持っている理由です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top