Gostaria de escrever alguns testes que verificam a configuração XML Spring de um WAR implantado. Infelizmente, alguns beans requerem que algumas variáveis de ambiente ou propriedades do sistema sejam definidas. Como posso definir uma variável de ambiente antes que os beans Spring sejam inicializados ao usar o estilo de teste conveniente com @ContextConfiguration?
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:whereever/context.xml")
public class TestWarSpringContext { ... }
Se eu configurar o contexto do aplicativo com anotações, não vejo um gancho onde posso fazer algo antes que o contexto de primavera seja inicializado.
java
spring
environment-variables
spring-test
Hans-Peter Störr
fonte
fonte
@BeforeClass
método para definir a propriedade do sistema e um@AfterClass
método para removê-la também funcionaria e limparia depois de si mesmo. (Não tentei, no entanto.)A maneira certa de fazer isso, a partir do Spring 4.1, é usar uma
@TestPropertySource
anotação.Consulte @TestPropertySource nos documentos e Javadocs do Spring .
fonte
@TestPropertySource(properties={"spring.cloud.config.label=feature/branch"})
Environment
propriedade, que é diferente de uma "variável de ambiente".Também é possível usar um ApplicationContextInitializer de teste para inicializar uma propriedade do sistema:
e, em seguida, configure-o na classe de teste, além dos locais do arquivo de configuração de contexto do Spring:
Desta forma, a duplicação de código pode ser evitada se uma determinada propriedade do sistema deve ser definida para todos os testes de unidade.
fonte
@SpringBootTest
ou qualquer uma das anotações deTodas as respostas aqui atualmente falam apenas sobre as propriedades do sistema, que são diferentes das variáveis de ambiente que são mais complexas de definir, esp. para testes. Felizmente, a classe abaixo pode ser usada para isso e a documentação da classe tem bons exemplos
EnvironmentVariables.html
Um exemplo rápido dos documentos, modificado para funcionar com @SpringBootTest
fonte
Se você deseja que suas variáveis sejam válidas para todos os testes, você pode ter um
application.properties
arquivo no diretório de recursos de teste (por padrãosrc/test/resources
:) que será semelhante a este:Isso será então carregado e usado, a menos que você tenha definições por meio de
@TestPropertySource
ou um método semelhante - a ordem exata em que as propriedades são carregadas pode ser encontrada na documentação do Spring, capítulo 24. Configuração externalizada .fonte
Você pode definir as propriedades do sistema como argumentos VM.
Se o seu projeto for um projeto maven, você pode executar o seguinte comando enquanto executa a classe de teste:
Classe de teste:
Se você deseja executar uma classe de teste individual ou método no eclipse:
1) Vá para Executar -> Executar configuração
2) No lado esquerdo, selecione sua classe de teste na seção Junit.
3) faça o seguinte:
fonte
Para testes de unidade, a variável de sistema ainda não é instanciada quando eu faço "mvn clean install" porque não há servidor executando o aplicativo. Portanto, para definir as propriedades do sistema, preciso fazer isso em pom.xml. Igual a:
fonte