Como recuperar Maven propriedades dentro de um teste JUnit?
Pergunta
Eu estou escrevendo um teste para uma classe de analisador de arquivo. O método de análise recebe um nome de arquivo como parâmetro, e deve abri-lo, a fim de analisá-lo (duh).
Eu tenho escrito um arquivo de teste, que eu coloquei para o diretório de teste / recursos dentro do meu diretório do projeto, e gostaria de passar esse arquivo para testar a minha análise. Uma vez que este projeto está em CVS, e será manipulado por outros, não posso duro código o caminho do arquivo, então eu pensei em usar a propriedade $ maven {basedir} para construir o nome do arquivo no meu teste. Algo como:
public void parseTest() {
...
sut.parse( ${basedir} + "src/test/resources/testFile" );
...
}
Alguém sabe como eu poderia conseguir isso?
Solução
Você tem 2 opções:
1) Passe o caminho do arquivo para o seu teste via uma propriedade do sistema ( docs )
Em seu pom você poderia fazer algo como:
<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>
Então em seu teste que você pode fazer:
System.getProperty("filePath");
2) Coloque o arquivo dentro src / test / recursos sob o mesmo pacote que a sua classe de teste. Então você pode obter para o arquivo usando Class.getResourceAsStream (String fileName) ( docs ).
Eu recomendo a opção 2 sobre a opção 1. Passando as coisas para seus testes através de propriedades do sistema é muito sujo IMO. Ele casais seus testes desnecessariamente ao corredor de teste e irá causar dores de cabeça para baixo da estrada. Carregando o arquivo fora do caminho de classe é o caminho a percorrer e é por isso maven tem o conceito de um diretório de recursos.