pra realizar testes dentro de um @Service, pegando toda a logica junto da camada de persistência, eu teria que considerar o teste em controllers mesmo ou teria uma outra forma mais adequada pra isso?
pra realizar testes dentro de um @Service, pegando toda a logica junto da camada de persistência, eu teria que considerar o teste em controllers mesmo ou teria uma outra forma mais adequada pra isso?
Oi Mateus
Você poderia fazer um mock da camada de service e testar apenas a lógica do Controller
mas pra testar a logica do service so pelo controller mesmo?
Oi Mateus,
Se você quer testar as regras de negócio que estão em uma classe service
, o ideal é criar um classe de testes especifica para essa classe service.
Inclusive, você pode utilizar mocks
para simular comportamentos das dependências que essa service tiver.
Bons estudos!
Entendido Rodrigo, mas em relação as anotações de uso do spring, teria algo em especifico? ate então eu só conheço teste nos serviços usando JUnit puro
Oi Mateus,
No caso de classes service não deveria ter interferência do Spring na hora de escrever os testes.
Exemplo:
@Service
public class ClienteService {
private ClienteRepository repository;
public ClienteService(ClienteRepository repository) {
this.repository = repository;
}
public void cadastrar(Cliente novo) {
boolean jaCadastrado = repository.existsByCpf(novo.getCpf());
if(jaCadastrado) {
throw new RegraDeNegocioException("Cliente com o mesmo CPF já está cadastrado!");
}
// outras regras de negocio...
repository.save(novo);
}
}
@ExtendWith(MockitoExtension.class) // no caso de Junit 4 trocar para: @RunWith(MockitoJUnitRunner.class)
public class ClienteServiceTest {
@InjectMocks
private ClienteService service;
@Mock
private ClienteRepository repository;
@Test
public void naoDeveriaCadastarClienteComCPFJaCadastrado() {
Cliente cliente = new Cliente("Fulano da Silva", "123.456.789-00");
//simulando que fez um select no banco de dados com o mock do repository
Mockito.when(repository.existsByCpf(cliente.getCpf())).thenReturn(true);
RegraDeNegocioException exception = assertThrows(RegraDeNegocioException.class, () -> service.cadastrar(cliente));
assertTrue(exception.getMessage().contains("Cliente com o mesmo CPF já está cadastrado!"));
}
//outros cenarios de testes....
}
Bons estudos!
A legal, ficou claro, obg pela ajuda