Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

168
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!