espero que todos estén bien
Estoy enfrentando algunos problemas al probar mi aplicación Spring Boot. Creé una API simple (actualmente tiene solo un método y está funcionando) y creé las pruebas de dominio que deshabilitan las configuraciones de JPA. Cuando pruebo con JPA deshabilitado, las pruebas proporcionan el siguiente error:
org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.mhrehbein.curriculum.register.infrastructure.mysql.ISpringDataAboutMeRepository' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {}Cuando habilito la configuración de JPA, funciona bien, pero me gustaría deshabilitarla una vez que sean pruebas unitarias. Puede consultar el código en el siguiente PR: https://github.com/retatu/curriculum/pull/6/files (lo siento)
En el código, puede ver que todas las pruebas están rotas, las pruebas son básicamente las mismas y el ejemplo está aquí: https://github.com/retatu/curriculum/blob/dev/src/test/java/com/mhrehbein/ currículum/registro/dominio/entidad/AboutMeTest.java
Agradezco cualquier ayuda
Spring tiene su contexto de aplicación de primavera que funciona como un contenedor de frijoles. BeanFactory representa la inversión de primavera del contenedor de control. Lo que hace es exponer los beans a la aplicación. Cuando su aplicación requiere un bean que no está disponible, lanza NoSuchBeanDefinitionException .
Creo que su pregunta y la causa raíz se responden mejor en la siguiente pregunta. Espero que le sirva de cinco puntos de vista sobre el problema.
¿Qué es una excepción NoSuchBeanDefinitionException y cómo la soluciono?
En su código, declaró una interfaz que extiende PagingAndSortingRepository :
public interface ISpringDataAboutMeRepository extends PagingAndSortingRepository<AboutMe, UUID> { } Significa que Spring Boot debe configurar automáticamente este bean de repositorio, es decir, se configurará como un bean proxy de SimpleJpaRepository .
Pero dado que deshabilitó DataSourceAutoConfiguration en application-test.properties , no se configuró ningún bean DataSource , por lo tanto, JpaRepositoriesAutoConfiguration automático no está activado y los repositorios JPA definidos por el usuario, en su caso ISpringDataAboutMeRepository , no están registrados , lo que conduce a la NoSuchBeanDefinitionException . Más info al respecto aquí .
Además, si deshabilita HibernateJpaAutoConfiguration , el bean EntityManagerFactory no está configurado, lo cual es necesario para crear su bean ISpringDataAboutMeRepository .
Como resultado, si desea ejecutar @SpringBootTest , debe eliminar su propiedad spring.autoconfigure.exclude de application-test.properties y configurar una base de datos para pruebas, por ejemplo, base de datos H2 en memoria:
Agregue a su build.gradle :
testImplementation group: 'com.h2database', name: 'h2', version: '1.4.200' Su application-test.properties -prueba.propiedades:
spring.datasource.url=jdbc:h2:mem:db;DB_CLOSE_DELAY=-1 spring.datasource.username=sa spring.datasource.password=sa De lo contrario, puede usar la anotación @MockBean en sus clases de prueba para simular su ISpringDataAboutMeRepository modo que:
@SpringBootTest @ExtendWith(SpringExtension.class) // remove it since @SpringBootTest already contains it @TestPropertySource(locations = "classpath:application-test.properties") @MockBean(ISpringDataAboutMeRepository.class) public class AboutMeTest { ... }