Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

169
Vistas
Evite que Spring Boot Test golpee @PostContruct de la clase SpringBootApplication

Tengo una clase SpringBootApplication que tiene un método @PostConstruct como ese (inicializa el tipo de conexión de la base de datos):

 @SpringBootApplication public class SpringBootApp extends WebMvcConfigurerAdapter { public static boolean workOffline = false; private boolean setupSchema = false; private IGraphService graphService; private DbC conf; @Autowired public SpringBootApp(IGraphService graphService, DbC conf) { this.graphService = graphService; this.conf = conf; } public static void main(String[] args) throws Exception { SpringApplication.run(SpringBootApp.class, args); } @PostConstruct public void initializeDB() { if (workOffline) { conf.setupOfflineEnvironment(); return; } else { conf.setupProdEnvironment(); } if (setupSchema) { graphService.setupTestUsers(); } } }

También estoy usando Spring Boot Tests que extend esta clase base:

 @RunWith(SpringRunner.class) @Ignore @SpringBootTest public class BaseTest { @Before public void beforeTest() { if (SpringBootApp.workOffline) { conf.setupOfflineEnvironment(); } else { conf.setupTestEnvironment(); } graphService.setupTestUsers();} @After public void afterTest() { graphService.deleteAllData(); } }

Mis pruebas están bajo tests/ mientras que mi código fuente está bajo src/

Desafortunadamente, hay casos en los que beforeTest() se ejecutará antes @PostConstuct y hay casos en los que se ejecutará después. ¿Hay alguna manera de hacer que mis pruebas se ejecuten con @SprinbBootTest sin ingresar/construir la clase SpringBootApp ?

¡Gracias!

about 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Según lo solicitado, aquí hay un intento de usar las propiedades de resorte (sin un IDE a mano, así que perdone cualquier error)

Puede establecer una propiedad para su prueba usando SpringBootTest#properties

 @RunWith(SpringRunner.class) @Ignore @SpringBootTest(properties="springBootApp.workOffline=true") public class BaseTest { @Before public void beforeTest() { /* setup */ } @After public void afterTest() { /* teardown */ } }

Ahora que sabemos que podemos configurar la propiedad spring en la prueba, podemos configurar la aplicación para usar la propiedad:

 @SpringBootApplication public class SpringBootApp extends WebMvcConfigurerAdapter { @Value("${springBootApp.workOffline:false}") private boolean workOffline = false; @Value("${springBootApp.setupSchema:false}") private boolean setupSchema = false; @PostConstruct public void initializeDB() { if (workOffline) { // ... } else { // ... } if (setupSchema) { // ... } } }

Mientras escribía esta respuesta, noté un par de cosas:

  • Si solo está configurando workOffline para poder ejecutar pruebas, entonces probablemente solo desee mover las acciones de configuración de la base de datos fuera de la aplicación y en su lugar a la clase BaseTest .
  • Lo mismo ocurre con setupSchema
  • Si está ejecutando sql para sus pruebas, no se olvide de @Sql y @SqlGroup : https://docs.spring.io/spring/docs/current/spring-framework-reference/html/integration-testing.html# __sql

¡De todos modos, buena suerte!

about 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda