Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Solucionado (ver solución)
Solucionado
(ver solución)
2
respuestas

UnsatisfiedDependencyException

Hola que tal, me esta saliendo este error:

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'med.voll.api.domain.medico.MedicoRepositoryTest': Unsatisfied dependency expressed through field 'testEntityManager': No qualifying bean of type 'org.springframework.boot.test.autoconfigure.orm.jpa.TestEntityManager' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}

para este código:

package med.voll.api.domain.medico;

import med.voll.api.domain.consulta.Consulta;
import med.voll.api.domain.direccion.DatosDireccion;
import med.voll.api.domain.paciente.DatosRegistroPaciente;
import med.voll.api.domain.paciente.Paciente;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.jdbc.AutoConfigureTestDatabase;
import org.springframework.boot.test.autoconfigure.orm.jpa.TestEntityManager;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.ActiveProfiles;

import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.temporal.TemporalAdjusters;

import static org.assertj.core.api.AssertionsForClassTypes.assertThat;


@SpringBootTest
@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)
@ActiveProfiles("test")
class MedicoRepositoryTest {

    @Autowired
    private MedicoRepository medicoRepository;

    @Autowired
    private TestEntityManager testEntityManager;

    @Test
    @DisplayName("deberia retornar nulo cuando el medico se encuentra en consulta con otro paciente en ese horario")
    void seleccionarMedicoConEspecialidadEnFechaEscenario1() {

        var proximoLunes10H = LocalDate.now()
                .with(TemporalAdjusters.next(DayOfWeek.MONDAY))
                .atTime(10, 0);

        var medico = registrarMedico("Jose", "j@gmail.com", "123456", Especialidad.CARDIOLOGIA);
        var paciente = registrarPaciente("Antonio", "a@gmail.com", "123457");
        registrarConsulta(medico, paciente, proximoLunes10H);

        var medicoLibre = medicoRepository.seleccionarMedicoConEspecialidadEnFecha(Especialidad.CARDIOLOGIA, proximoLunes10H);

        assertThat(medicoLibre).isNull();

    }

    private void registrarConsulta(Medico medico, Paciente paciente, LocalDateTime fecha){
        testEntityManager.persist(new Consulta(null, medico, paciente, fecha, null));
    }

    private Medico registrarMedico(String nombre, String email, String documento, Especialidad especialidad){
        var medico = new Medico(datosMedico(nombre, email, documento, especialidad));
        testEntityManager.persist(medico);
        return medico;
    }

    private Paciente registrarPaciente(String nombre, String email, String documento){
        var paciente = new Paciente(datosPaciente(nombre, email, documento));
        testEntityManager.persist(paciente);
        return paciente;
    }

    private DatosRegistroMedico datosMedico(String nombre, String email, String documento, Especialidad especialidad) {
        return new DatosRegistroMedico(
                nombre,
                email,
                "234234234",
                documento,
                especialidad,
                datosDireccion()
        );
    }

    private DatosRegistroPaciente datosPaciente(String nombre, String email, String documento) {
        return new DatosRegistroPaciente(
                nombre,
                email,
                "123123214",
                documento,
                datosDireccion()
        );
    }

    private DatosDireccion datosDireccion() {
        return new DatosDireccion(
                "loca",
                "azul",
                "Gigante",
                "321",
                "15"
        );
    }
}

segun veo esta igual al del video con la diferencia que yo estoy utilzando otra base de datos

2 respuestas
solución!

Hola Danny,

El error UnsatisfiedDependencyException indica que Spring no puede encontrar un bean que coincida con el tipo TestEntityManager para inyectarlo en tu clase de prueba.

Una de las razones más comunes es que la anotación @DataJpaTest no se encuentra en tu clase de prueba. Esta anotación es necesaria para que Spring configure automáticamente las cosas necesarias para las pruebas que involucran la capa de persistencia, como TestEntityManager.

Además, necesitarás proporcionar la configuración de la base de datos para el perfil de prueba en tu archivo application-test.properties o application-test.yml.

spring.datasource.url=jdbc:mysql://localhost:3306/test_db
spring.datasource.username=test_user
spring.datasource.password=test_password
spring.jpa.hibernate.ddl-auto=create-drop

Espero que esto resuelva el problema. Si el problema persiste, te sugeriría que revises la configuración de tu base de datos y asegúrate de que Spring puede acceder a ella correctamente.

Espero haber ayudado. Mucho éxito en todo lo que te propongas y si tienes alguna duda aquí estaremos para apoyarte.

¡Vamos juntos!

Si este post te ayudó, por favor, marca como solucionado ✓. Continúa con tus estudios

muchas gracias efectivamente era esto @DataJpaTest