Oi, Alexandre! Como vai?
Sei como pode ser confuso no início testar classes de serviço em uma aplicação Spring Boot. Vou te dar algumas dicas para te ajudar a estruturar melhor seus testes.
Primeiro, é importante que você utilize a anotação correta para criar seus testes. Para testar classes de serviço, você pode usar o @ExtendWith(MockitoExtension.class)
do JUnit 5 e o @Mock
do Mockito para criar os mocks. Além disso, você deve usar a anotação @InjectMocks
para injetar os mocks na classe que você está testando. Aqui está um exemplo de como você pode estruturar isso:
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
import static org.mockito.Mockito.*;
@ExtendWith(MockitoExtension.class)
public class AgendaDeConsultasTest {
@Mock
private ConsultaRepository consultaRepository;
@Mock
private MedicoRepository medicoRepository;
@Mock
private BeneficiarioRepository beneficiarioRepository;
@Mock
private List<ValidadorAgendamentoDeConsulta> validadores;
@Mock
private List<ValidadorCancelamentoDeConsulta> validadoresCancelamento;
@InjectMocks
private AgendaDeConsultas agendaDeConsultas;
@BeforeEach
void setUp() {
// Configurar mocks se necessário
}
@Test
void testAgendamentoDeConsultaComSucesso() {
// Configurar os mocks para o cenário de sucesso
when(consultaRepository.save(any())).thenReturn(new Consulta());
// Adicione mais configurações de mocks conforme necessário
// Chamar o método a ser testado
agendaDeConsultas.agendarConsulta(/* parâmetros necessários */);
// Verificar se os métodos dos mocks foram chamados corretamente
verify(consultaRepository).save(any());
// Adicione mais verificações conforme necessário
}
@Test
void testAgendamentoDeConsultaComErro() {
// Configurar os mocks para o cenário de erro
when(consultaRepository.save(any())).thenThrow(new RuntimeException("Erro ao salvar consulta"));
// Adicione mais configurações de mocks conforme necessário
// Chamar o método a ser testado e verificar se a exceção é lançada
assertThrows(RuntimeException.class, () -> {
agendaDeConsultas.agendarConsulta(/* parâmetros necessários */);
});
// Verificar se os métodos dos mocks foram chamados corretamente
verify(consultaRepository).save(any());
// Adicione mais verificações conforme necessário
}
}
Nesse exemplo, você pode ver como configurar os mocks e injetá-los na classe AgendaDeConsultas
. Em seguida, você pode configurar os mocks para retornar valores específicos ou lançar exceções, dependendo do cenário que você está testando. Por fim, você pode usar o verify
para garantir que os métodos dos mocks foram chamados corretamente.
Espero ter ajudado e bons estudos!
Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.