Existem diferenças e restrições nas opções oferecidas por @Steve C e @ ashosborne1. Eles devem ser especificados, acredito.
Quando podemos usar File resourcesDirectory = new File("src/test/resources");
:?
- 1 Quando os testes serão executados apenas pelo maven, mas não pelo IDE.
- 2.1 Quando os testes serão realizados via maven ou
- 2.2 via IDE e apenas um projeto é importado para o IDE. (Eu uso o termo "importado", porque ele é usado no IntelliJ IDEA. Acho que os usuários do eclipse também importam seu projeto maven). Isso funcionará, pois o diretório de trabalho ao executar testes via IDE é igual ao seu projeto.
- 3.1 Quando os testes serão realizados via maven ou
- 3.2 via IDE, e mais de um projeto é importado para o IDE (quando você não é aluno, geralmente importa vários projetos) E antes de executar testes via IDE, você configura manualmente o diretório de trabalho para seus testes. Esse diretório de trabalho deve se referir ao seu projeto importado que contém os testes. Por padrão, o diretório de trabalho de todos os projetos importados para o IDE é apenas um. Provavelmente é apenas uma restrição
IntelliJ IDEA
, mas acho que todos os IDEs funcionam assim. E essa configuração que deve ser feita manualmente, não é boa. Trabalhando com vários testes existentes em diferentes projetos, mas importados para um grande projeto “IDE”, nos forçamos a lembrar disso e não permitimos relaxar e desfrutar do seu trabalho.
A solução oferecida por @ ashosborne1 (pessoalmente, prefiro este) requer 2 requisitos adicionais que devem ser feitos antes da execução dos testes. Aqui está uma lista de etapas para usar esta solução:
Crie uma pasta de teste ("teva") e um arquivo ("leia-me") dentro de "src / test / resources /":
src / test / recursos / teva / readme
O arquivo deve ser criado na pasta de teste, caso contrário, não funcionará. Maven ignora pastas vazias.
Pelo menos uma vez construa o projeto via mvn clean install
. Também executará testes. Pode ser suficiente executar apenas sua classe / método de teste via maven sem criar um projeto inteiro. Como resultado, seus recursos de teste serão copiados para classes de teste, eis um caminho:target/test-classes/teva/readme
Depois disso, você pode acessar a pasta usando o código, já oferecido por @ ashosborne1 (desculpe, não foi possível editar esse código dentro desta lista de itens corretamente):
public static final String TEVA_FOLDER = "teva"; ...
URL tevaUrl = YourTest.class.getClassLoader().getResource(TEVA_FOLDER);
String tevaTestFolder = new File(tevaUrl.toURI()).getAbsolutePath();
Agora você pode executar seu teste via IDE quantas vezes quiser. Até você executar o mvn clean. Ele soltará a pasta de destino.
Criar arquivos dentro de uma pasta de teste e executar o maven pela primeira vez, antes de executar testes via IDE, são etapas necessárias. Sem essas etapas, se você apenas criar no IDE recursos de teste, gravar o teste e executá-lo apenas via IDE, receberá um erro. A execução de testes via mvn copia os recursos de teste para target / test-classes / teva / readme e eles se tornam acessíveis para um carregador de classe.
Você pode perguntar: por que preciso importar mais de um projeto de maven no IDE e por que tantas coisas complicadas? Para mim, uma das principais motivações: manter os arquivos relacionados à IDA longe do código. Primeiro criei um novo projeto no meu IDE. É um projeto falso, que é apenas um detentor de arquivos relacionados ao IDE. Em seguida, importo projetos maven já existentes. Forço esses projetos importados a manter os arquivos IDEA apenas no meu projeto falso original. Como resultado, não vejo arquivos relacionados ao IDE no código. O SVN não deve vê-los (não ofereça configurar o svn / git para ignorar esses arquivos, por favor). Também é apenas muito conveniente.