21

ファイルパーサークラスのテストを書いています。parseメソッドは、パラメーターとしてファイル名を受け取り、それを解析するためにそれを開く必要があります(duh)。

プロジェクトディレクトリ内のtest/resourcesディレクトリにテストファイルを作成しました。このファイルを渡して、解析をテストしたいと思います。このプロジェクトはCVSにあり、他のユーザーによって操作されるため、ファイルパスをハードコーディングできないため、テストでファイル名を作成するためにmaven${basedir}プロパティを使用することを検討しました。何かのようなもの:

public void parseTest() {
    ...
    sut.parse( ${basedir} + "src/test/resources/testFile" );
    ...
}

誰かが私がこれをどのように達成できるか知っていますか?

4

1 に答える 1

27

2つのオプションがあります:

1)システムプロパティ( docs)を介してテストへのファイルパスを渡します

あなたの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)( docs )を使用してファイルにアクセスできます。

オプション1よりもオプション2を強くお勧めします。システムプロパティを介してテストに合格することは、非常にダーティなIMOです。それはあなたのテストを不必要にテストランナーに結びつけ、将来的に頭痛を引き起こします。クラスパスからファイルをロードするのが方法であり、それがmavenがリソースディレクトリの概念を持っている理由です。

于 2008-10-29T17:03:16.593 に答える