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

381
Vistas
¿Puede tener varias clases de @SpringBootTest, cada una con su propia @TestConfiguration interna que define el mismo bean sin conflictos?

Para ilustrar el problema, tengo dos clases @SpringBootTest separadas, cada una de las cuales tiene una clase estática interna @TestConfiguration, las cuales crean el mismo bean.

Cuando ejecuto TestB, veo que el bean "stringBeans" de TestA se está creando y utilizando y viceversa. ¿Por qué es esto? Quiero poder crear diferentes pruebas que definan el mismo bean pero con ese bean configurado de manera diferente. ¿Cómo puedo conseguir esto?

 @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, properties = "spring.main.allow-bean-definition-overriding=true") public class TestA { @TestConfiguration static class TestConfig { @Bean @Primary public String stringBeans() { System.out.println("Creating string bean from Test A"); return "Test A"; } } @Test public void testA() { System.out.println("Running Test A"); } }

Al ejecutar la prueba anterior, veo el siguiente resultado:

Creando string bean a partir de la Prueba B

Ejecución de la prueba A

 @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, properties = "spring.main.allow-bean-definition-overriding=true") public class TestB { @Autowired String stringBeans; @TestConfiguration static class TestConfig { @Bean @Primary public String stringBeans() { System.out.println("Creating string bean from Test B"); return "Test B"; } } @Test public void testB() { System.out.println("Running Test B"); assertThat(stringBeans).isEqualTo("Test B"); } }

Al ejecutar la prueba anterior, la aserción falla y veo el siguiente resultado:

Creando string bean a partir de la Prueba A

Ejecución de la prueba B

Intenté crear clases separadas anotadas con @TestConfiguration y usar @Import para incluirlas en cada prueba respectiva, pero eso no resuelve este problema de manera consistente.

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

0

Estaba probando una Spring Cloud Function y resultó que tenía un análisis de componentes definido en application.yml en la carpeta test/resources que estaba causando que se evaluaran ambas clases @TestConfiguration internas. Por lo tanto, debe tener mucho cuidado con la configuración de su prueba; de lo contrario, puede ocurrir un comportamiento extraño que puede ser difícil de rastrear.

En este ejemplo, tenía todas mis clases definidas en com.example.demo y application.yml de la siguiente manera

 spring: cloud: function: scan: packages: com.example.demo

Las pruebas se ejecutan como se esperaba después de eliminar este análisis innecesario.

over 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