variable restaurar modificar java_home entorno configurar java spring environment-variables spring-test

java - restaurar - ¿Cómo establecer la variable de entorno o la propiedad del sistema en las pruebas de primavera?



variables de entorno java linux (4)

Me gustaría escribir algunas pruebas que comprueben la configuración de XML Spring de un WAR implementado. Desafortunadamente, algunos beans requieren que se establezcan algunas variables de entorno o propiedades del sistema. ¿Cómo puedo establecer una variable de entorno antes de que los beans de primavera se inicialicen al usar 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 enlace donde pueda hacer algo antes de que se inicialice el contexto de primavera.


La forma correcta de hacerlo, comenzando con Spring 4.1, es usar una anotación @TestPropertySource .

@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = "classpath:whereever/context.xml") @TestPropertySource(properties = {"myproperty = foo"}) public class TestWarSpringContext { ... }

Ver @TestPropertySource en los documentos de Spring y Javadocs .


Puede inicializar la propiedad del sistema en un inicializador estático:

@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = "classpath:whereever/context.xml") public class TestWarSpringContext { static { System.setProperty("myproperty", "foo"); } }

El código del inicializador estático se ejecutará antes de que se inicialice el contexto de la aplicación de primavera.


Si desea que sus variables sean válidas para todas las pruebas, puede tener un archivo application.properties en su directorio de recursos de prueba (de forma predeterminada: src/test/resources ) que se verá más o menos así:

MYPROPERTY=foo

Esto se cargará y usará a menos que tenga definiciones a través de @TestPropertySource o un método similar: el orden exacto en que se cargan las propiedades se puede encontrar en el capítulo 24 de la documentación de Spring . Configuración externalizada .


También se puede usar una prueba ApplicationContextInitializer para inicializar una propiedad del sistema:

public class TestApplicationContextInitializer implements ApplicationContextInitializer<ConfigurableApplicationContext> { @Override public void initialize(ConfigurableApplicationContext applicationContext) { System.setProperty("myproperty", "value"); } }

y luego configúrelo en la clase de prueba además de las ubicaciones del archivo de configuración de contexto Spring:

@ContextConfiguration(initializers = TestApplicationContextInitializer.class, locations = "classpath:whereever/context.xml", ...) @RunWith(SpringJUnit4ClassRunner.class) public class SomeTest { ... }

De esta forma, se puede evitar la duplicación de código si se debe establecer una determinada propiedad del sistema para todas las pruebas unitarias.