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

@BeforeClassmétodo para establecer la propiedad del sistema y un@AfterClassmé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
@TestPropertySourceanotación.Vea @TestPropertySource en Spring docs y Javadocs .
fuente
@TestPropertySource(properties={"spring.cloud.config.label=feature/branch"})Environmentpropiedad, 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
@SpringBootTesto 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.propertiesarchivo en su directorio de recursos de prueba (por defecto :)src/test/resourcesque se verá así:Esto luego se cargará y usará a menos que tenga definiciones a través de
@TestPropertySourceo 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