Me gustaría escribir algunas pruebas que verifiquen la configuración XML Spring de un WAR implementado. Desafortunadamente, algunos beans requieren que se establezcan algunas variables de entorno o propiedades del sistema. ¿Cómo puedo configurar una variable de entorno antes de que se inicialicen los beans de primavera cuando utilizo el estilo de prueba conveniente con @ContextConfiguration?
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:whereever/context.xml")
public class TestWarSpringContext { ... }
Si configuro el contexto de la aplicación con anotaciones, no veo un gancho en el que pueda hacer algo antes de que se inicialice el contexto de primavera.
java
spring
environment-variables
spring-test
Hans-Peter Störr
fuente
fuente
@BeforeClass
método para establecer la propiedad del sistema y un@AfterClass
método para eliminarlo también funcionaría, y se limpiaría muy bien después de sí mismo. (Sin embargo, no lo probé)La forma correcta de hacer esto, comenzando con Spring 4.1, es usar una
@TestPropertySource
anotación.Vea @TestPropertySource en Spring docs y Javadocs .
fuente
@TestPropertySource(properties={"spring.cloud.config.label=feature/branch"})
Environment
propiedad, que es diferente a una "Variable de entorno".También se puede usar un ApplicationContextInitializer de prueba para inicializar una propiedad del sistema:
y luego configúrelo en la clase de prueba además de las ubicaciones del archivo de configuración de contexto de Spring:
De esta manera, se puede evitar la duplicación de código si se debe establecer una determinada propiedad del sistema para todas las pruebas unitarias.
fuente
@SpringBootTest
o cualquiera de las anotaciones de corte de prueba )Todas las respuestas aquí actualmente solo hablan sobre las propiedades del sistema que son diferentes de las variables de entorno que son más complejas de configurar, especialmente. para pruebas. Afortunadamente, la clase a continuación se puede usar para eso y los documentos de la clase tienen buenos ejemplos
EnvironmentVariables.html
Un ejemplo rápido de los documentos, modificado para trabajar con @SpringBootTest
fuente
Si desea que sus variables sean válidas para todas las pruebas, puede tener un
application.properties
archivo en su directorio de recursos de prueba (por defecto :)src/test/resources
que se verá así:Esto luego se cargará y usará a menos que tenga definiciones a través de
@TestPropertySource
o un método similar; el orden exacto en el que se cargan las propiedades se puede encontrar en el capítulo 24 de la documentación de Spring . Configuración externa .fuente
Puede establecer las propiedades del sistema como argumentos de máquina virtual.
Si su proyecto es un proyecto experto, puede ejecutar el siguiente comando mientras ejecuta la clase de prueba:
Clase de prueba:
Si desea ejecutar una clase o método de prueba individual en eclipse, entonces:
1) Vaya a Ejecutar -> Ejecutar configuración
2) En el lado izquierdo, seleccione su clase de prueba en la sección Junit.
3) haz lo siguiente:
fuente
Para las pruebas unitarias, la variable del sistema aún no se crea una instancia cuando hago "mvn clean install" porque no hay ningún servidor que ejecute la aplicación. Entonces, para configurar las propiedades del sistema, necesito hacerlo en pom.xml. Al igual que:
fuente