texto mostrar font ejemplo java spring junit profile

font - mostrar texto en jlabel java



Perfiles de primavera y pruebas. (4)

Tengo una aplicación web donde tengo el problema típico de que requiere diferentes archivos de configuración para diferentes entornos. Algunas configuraciones se colocan en el servidor de aplicaciones como fuentes de datos JNDI, sin embargo, algunas configuraciones permanecen en los archivos de propiedades.

Por lo tanto, quiero usar la función de perfiles de primavera.

Mi problema es que no me estoy ejecutando el caso de prueba.

context.xml:

<context:property-placeholder location="classpath:META-INF/spring/config_${spring.profiles.active}.properties"/>

Caso de prueba:

@RunWith(SpringJUnit4ClassRunner.class) @TestExecutionListeners({ TestPreperationExecutionListener.class }) @Transactional @ActiveProfiles(profiles = "localtest") @ContextConfiguration(locations = { "classpath:context.xml" }) public class TestContext { @Test public void testContext(){ } }

El problema parece ser que la variable para cargar el perfil no se resuelve:

Caused by: java.io.FileNotFoundException: class path resource [META-INF/spring/config_${spring.profiles.active}.properties] cannot be opened because it does not exist at org.springframework.core.io.ClassPathResource.getInputStream(ClassPathResource.java:157) at org.springframework.core.io.support.PropertiesLoaderSupport.loadProperties(PropertiesLoaderSupport.java:181) at org.springframework.core.io.support.PropertiesLoaderSupport.mergeProperties(PropertiesLoaderSupport.java:161) at org.springframework.context.support.PropertySourcesPlaceholderConfigurer.postProcessBeanFactory(PropertySourcesPlaceholderConfigurer.java:138) ... 31 more

El perfil actual debe configurarse con la anotación @ActiveProfile . Como es un testcase no podré usar el web.xml . Si es posible, me gustaría evitar las opciones de tiempo de ejecución también. La prueba debe ejecutarse como está (si es posible).

¿Cómo puedo activar adecuadamente el perfil? ¿Es posible configurar el perfil con un context.xml? ¿Puedo declarar la variable en un test-context.xml que en realidad está llamando al contexto normal?


¿Puedo recomendar hacerlo de esta manera, define tu prueba de esta manera?

@RunWith(SpringJUnit4ClassRunner.class) @TestExecutionListeners({ TestPreperationExecutionListener.class }) @Transactional @ActiveProfiles(profiles = "localtest") @ContextConfiguration public class TestContext { @Test public void testContext(){ } @Configuration @PropertySource("classpath:/myprops.properties") @ImportResource({"classpath:context.xml" }) public static class MyContextConfiguration{ } }

Con el siguiente contenido en el archivo myprops.properties:

spring.profiles.active=localtest

Con esto su segundo archivo de propiedades debería resolverse:

META-INF/spring/config_${spring.profiles.active}.properties


El mejor enfoque aquí es eliminar la anotación @ActiveProfiles y hacer lo siguiente:

@RunWith(SpringJUnit4ClassRunner.class) @TestExecutionListeners({ TestPreperationExecutionListener.class }) @Transactional @ContextConfiguration(locations = { "classpath:config/test-context.xml" }) public class TestContext { @BeforeClass public static void setSystemProperty() { Properties properties = System.getProperties(); properties.setProperty("spring.profiles.active", "localtest"); } @AfterClass public static void setSystemProperty() { System.clearProperty("spring.profiles.active"); } @Test public void testContext(){ } }

Y tu test-context.xml debería tener lo siguiente:

<context:property-placeholder location="classpath:META-INF/spring/config_${spring.profiles.active}.properties"/>


Mirando la respuesta de Biju, encontré una solución funcional.

Creé un archivo de contexto adicional test-context.xml :

<context:property-placeholder location="classpath:config/spring-test.properties"/>

Contiene el perfil:

spring.profiles.active=localtest

Y cargando la prueba con:

@RunWith(SpringJUnit4ClassRunner.class) @TestExecutionListeners({ TestPreperationExecutionListener.class }) @Transactional @ActiveProfiles(profiles = "localtest") @ContextConfiguration(locations = { "classpath:config/test-context.xml" }) public class TestContext { @Test public void testContext(){ } }

Esto ahorra algo de trabajo al crear múltiples casos de prueba.


public class LoginTest extends BaseTest { @Test public void exampleTest( ){ // Test } }

Se hereda de una clase de prueba base (este ejemplo es testng lugar de jUnit , pero ActiveProfiles es el mismo):

@ContextConfiguration(locations = { "classpath:spring-test-config.xml" }) @ActiveProfiles(resolver = MyActiveProfileResolver.class) public class BaseTest extends AbstractTestNGSpringContextTests { }

MyActiveProfileResolver puede contener cualquier lógica requerida para determinar qué perfil usar:

public class MyActiveProfileResolver implements ActiveProfilesResolver { @Override public String[] resolve(Class<?> aClass) { // This can contain any custom logic to determine which profiles to use return new String[] { "exampleProfile" }; } }

Esto establece el perfil que luego se utiliza para resolver las dependencias requeridas por la prueba.