Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Mockando Repository no Spring boot

Oi,

Eu estou criando testes para uma classe de servico, criei um mock do repository, mas esta dando esse erro,

java.lang.ClassCastException: org.mockito.codegen.Object$MockitoMock$1744577968 cannot be cast to br.com.janadev.model.Cliente

Minha classe de servico chama o repository para persistir as informacoes no banco, entao criei um mock para o repository na classe de teste. Minha classe de teste esta assim,

public class ClienteServiceImplTest {

    @Mock(answer = Answers.RETURNS_SMART_NULLS)
    CustomerRepository repository;

    @InjectMocks
    CustomerServiceImpl service;

    public Address address = null;
    public Customer customer = null;
    public CustomerRequestDTO requestDto = null;
    public CustomerResponseDTO responseDto = null;

    @BeforeEach
    public void setUp() {
        MockitoAnnotations.initMocks(this);

        address = new Address("Rua da Jana", 2051, "Bairro da Jana", "04735400", "São Paulo", "SP");
        customer = new Customer("44140948756", "Janaina", address, "11960314430");
        customer.setId(1l);
        requestDto = new CustomerRequestDTO(customer.getCpf(), customer.getName(), customer.getAddress(), 
                customer.getPhone(), customer.getActive());
        responseDto = new CustomerResponseDTO(customer);
    }

    @Test
    public void should_createCustomer_when_sendCustomer() {

        doReturn(customer).when(repository).save(customer);

        CustomerResponseDTO responseDTO = service.createCustomer(requestDto);

        assertEquals("44140948756", responseDTO.getCpf());
        assertEquals("Janaina", responseDTO.getName());
        assertEquals("04735400", responseDTO.getAddress().getZipCode());
        assertEquals("11960314430", responseDTO.getPhone());
    }
}

Nao sei se eu posso criar um mock do Repository sendo ele uma interface e tambem tenho duvidas se por a minha classe Cliente ter metodos estaticos fromDto() e toDto() possa estar causando isso. Pesquisei mas nao encontrei algo que me ajudasse.

Desculpa estar escrevendo sem a acentuacao e com pontuacao errada meu teclado esta maluco.

1 resposta
solução!

Ao invés de mockar o CustomerRepository (interface), coloque a implementação