Boa noite, como faço para usar o mockito,when quando o retorno vem uma lista vazia? num metodo que não recebe parametro?
que testar se o metodo devolve uma lista vazia quando a informação não existe na base.
Obrigada.
Boa noite, como faço para usar o mockito,when quando o retorno vem uma lista vazia? num metodo que não recebe parametro?
que testar se o metodo devolve uma lista vazia quando a informação não existe na base.
Obrigada.
Oi Guilherme,
Se você precisar "mockar" o retorno para vir uma lsita vazia:
Mockito.when(mock.metodo()).thenReturn(Collections.emptyList());
E para verficar a lista:
assertTrue(lista.isEmpty());
Boa tarde professor, tudo bem??
Ao tentar implementar ele dá erro na parte do collections
Mockito.when(Mockito.mock(usuarioRepository.retornaUsuario()
.getClass()))
.thenReturn(Collections.emptyList());
erro:
outra duvida essa implentação se retonar valor, vai passar no teste?
Oi Guilherme,
Vou precisar ver o teu codigo completo para entender melhor o que você deseja simular de comportamento para o teste.
é um metodo bem simples, estou usando para estudos e gostaria de saber se consigo testar esse metodo num cenario de retorno nulo.
Seria algo assim?
classe que você deseja testar:
public class ProdutoService {
private ProdutoRepository repository;
public Produto buscar(Long id) {
return repository.buscarPorId(id);
}
}
Classe de teste:
@ExtendWith(MockitoExtension.class)
public class ProdutoServiceTest {
@InjectMocks
private ProdutoService service;
@Mock
private ProdutoRepository repository;
@Test
void deveriaRetornarUmProdutoComIdCadastrado() {
Mockito.when(repository.findById(1l)).thenReturn(new Produto());
Produto encontrado = service.buscar(1l);
assertNotNull(encontrado);
}
@Test
void deveriaRetornarNullComIdInexistente() {
Mockito.when(repository.findById(999l)).thenReturn(null);
Produto encontrado = service.buscar(999l);
assertNull(encontrado);
}
}
Ola, boma dia!
Eu queria testar um metodo de um batch, esse batch ele fica indo na base verificar se existe algo para ele selecionar e jogar numa fila Kafka, esse metodo não recebe parametro, ele faz a busca só pegando o que tem na base. Caso ele não ache nada ele retorna uma lista de usuario vazia.
Como teste se o metodo retorna mesmo uma lista vazia quando não encontra valor?
Acho que seria algo assim então:
Classe com a lógica:
public class BatchService {
private UsuarioRepository repository;
private FilaKafka filaKafka;
public List<Usuario> executar() {
//lista vem vazia quando nao tem registro:
List<Usuario> usuarios = repository.buscar();
// se tem registros, envia para o kafka
if (!usuarios.isEmpty()) {
filaKafka.enviar(usuarios);
}
return usuarios;
}
}
Classe de testes:
@ExtendWith(MockitoExtension.class)
public class BatchServiceTest {
@InjectMocks
private BatchService service;
@Mock
private UsuarioRepository repository;
@Mock
private FilaKafka filaKafka;
@Test
void deveriaEnviarParaFilaQuandoExistemRegistros() {
List<Usuario> usuarios = Arrays.asList(new Usuario());
Mockito.when(repository.buscar()).thenReturn(usuarios);
List<Usuario> devolvidos = service.executar();
// lista nao pode ser vazia
assertFalse(devolvidos.isEmpty());
// verificando se a lista foi enviada para o kafka:
Mockito.verify(filaKafka.enviar(usuarios));
}
@Test
void deveriaDevolverListaVaziaQuandoNaoExistemRegistros() {
List<Usuario> usuarios = new ArrayList<>();
Mockito.when(repository.buscar()).thenReturn(usuarios);
List<Usuario> devolvidos = service.executar();
// lista deve ser vazia
assertTrue(devolvidos.isEmpty());
// verificando se o kafka nao foi chamado:
Mockito.verifyNoInteractions(filaKafka);
}
}
Ola, é basicamente isso mesmo, cheguei a testar no cenário em que o batch retorna nullo e deu sucesso porém o outro teste que espera valor acaba falhando.
Tem como colocar uma condição aqui: Mockito.when(repository.buscar()).thenReturn(usuarios); para que ele só verifique se o retono é nulo ou se tem valor, de acordo com o teste que está sendo escrito?
Como existem dois possiveis retornos só um dos teste dá sucesso, um deles acaba falhando dependendo do que retorna do repository.
Obrigada.
Oie. algum retorno sobre o ponto acima??/