sec form docs spring spring-boot spring-test

sec - spring form docs



Reemplace una sola clase @Configuration en cada inicio de primavera @Test (3)

En mi aplicación Spring Boot quiero anular solo una de mis clases @Configuration con una configuración de prueba (en particular mi clase @EnableAuthorizationServer @Configuration ), en todas mis pruebas.

Hasta ahora, después de una visión general de las funciones de prueba de arranque de primavera y las funciones de prueba de integración de primavera, no ha surgido una solución sencilla:

  • @TestConfiguration : Es para extender, no para anular;
  • @ContextConfiguration(classes=…​) y @SpringApplicationConfiguration(classes =…​) me permite anular toda la configuración, no solo la clase;
  • Se @Configuration clase interna @Configuration dentro de un @Test para anular la configuración predeterminada, pero no se proporciona ningún ejemplo;

¿Alguna sugerencia?


Deberías usar perfiles de arranque de primavera :

  1. Anote su configuración de prueba con @Profile("test") .
  2. Anote su configuración de producción con @Profile("production") .
  3. Establezca el perfil de producción en su archivo de propiedades: spring.profiles.active=production .
  4. Establezca el perfil de prueba en su clase de prueba con @Profile("test") .

Por lo tanto, cuando la aplicación se inicie, usará la clase "producción" y cuando las estrellas de prueba usará la clase "prueba".

Si usa la clase @Configuration interna / anidada, se usará en lugar de la configuración principal de su aplicación.


Hace poco tuve que crear una versión dev de nuestra aplicación, que debería ejecutarse con el perfil activo de dev fuera de la caja sin ningún argumento de línea de comando. Lo resolví agregando esta clase como una nueva entrada, que establece el perfil activo mediante programación:

package ...; import org.springframework.boot.SpringApplication; import org.springframework.context.annotation.Import; import org.springframework.core.env.ConfigurableEnvironment; import org.springframework.core.env.StandardEnvironment; @Import(OriginalApplication.class) public class DevelopmentApplication { public static void main(String[] args) { SpringApplication application = new SpringApplication(DevelopmentApplication.class); ConfigurableEnvironment environment = new StandardEnvironment(); environment.setActiveProfiles("dev"); application.setEnvironment(environment); application.run(args); } }

Ver el Ejemplo de Perfiles de Arranque de Primavera por Arvind Rai para más detalles


Configuración de prueba interna

Ejemplo de una configuración @ interna para su prueba:

@RunWith(SpringRunner.class) @SpringBootTest public class SomeTest { @Configuration static class ContextConfiguration { @Bean @Primary //may omit this if this is the only SomeBean defined/visible public SomeBean someBean () { return new SomeBean(); } } @Autowired private SomeBean someBean; @Test public void testMethod() { // test } }

Configuración de prueba reutilizable

Si desea reutilizar la configuración de prueba para varias pruebas, puede definir una clase de configuración independiente con un perfil de perfil de Spring @Profile("test") . Luego, @ActiveProfiles("test") que su clase de prueba active el perfil con @ActiveProfiles("test") . Ver código completo:

@RunWith(SpringRunner.class) @SpringBootTests @ActiveProfiles("test") public class SomeTest { @Autowired private SomeBean someBean; @Test public void testMethod() { // test } } @Configuration @Profile("test") public class TestConfiguration { @Bean @Primary //may omit this if this is the only SomeBean defined/visible public SomeBean someBean() { return new SomeBean(); } }

@Primario

La anotación @Primary en la definición de bean es asegurar que esta tendrá prioridad si se encuentran más de una.