O sistema possui três entidades (Comprador, Produto, Carrinho)
Ao criar um produto e um comprador, eles serão adicionados em no Carrinho. Assim, o carrinho conterá um produto e os dois estarão associados a um comprador
- Comprador: Criar (Post), Listar todos (Get), Obter por id (Get), Atualizar (Put) e deletar por id (Delete)
- Produto: Criar (Post), Listar (Get)
- Carrinho: Criar (Post), Obter por id (Get)
Camada | Função |
---|---|
Entity | Inserção/recepção de atributos e conf. das classes |
Repository | Extende JpaRepository para métodos de CRUD |
Controller | Configurar verbos e status HTTP |
Service | Regras do sistema e ações CRUD |
Os testes foram realizados nas camadas de Controller e Service, além da classe principal. Dessa forma, os métodos e atributos das demais classes puderam ser testadas também Veja abaixo um exemplo de teste do método create da classe Carrinho:
@Test
void criar() {
Mockito.when(carrinhoService.criar(Mockito.any())).thenReturn(carrinho);
ResponseEntity<Carrinho> response = carrinhoController.criar(carrinho);
assertNotNull(response);
assertNotNull(response.getBody());
assertNotNull(response.getBody().getId());
assertNotNull(response.getBody().getProduto());
assertNotNull(response.getBody().getComprador());
assertEquals(HttpStatus.OK, response.getStatusCode());
assertEquals(ResponseEntity.class, response.getClass());
assertEquals(Carrinho.class, response.getBody().getClass());
assertEquals(Produto.class, response.getBody().getProduto().getClass());
assertEquals(Comprador.class, response.getBody().getComprador().getClass());
assertEquals(1L, response.getBody().getComprador().getId());
assertEquals("Ana", response.getBody().getComprador().getNome());
assertEquals("1234", response.getBody().getComprador().getCpf());
assertEquals("Endereco", response.getBody().getComprador().getEndereco());
assertEquals("4321", response.getBody().getComprador().getTelefone());
assertEquals(1L, response.getBody().getProduto().getId());
assertEquals("Arroz", response.getBody().getProduto().getNome());
assertEquals(3.50, response.getBody().getProduto().getValorUnitario());
assertEquals(2, response.getBody().getProduto().getQuantidade());
assertEquals(7, response.getBody().getProduto().getValorTotal());
Double total = response.getBody().getProduto().getValorUnitario()*response.getBody().getProduto().getQuantidade();
assertEquals(total, response.getBody().getProduto().getValorTotal());
}
Print da criação de um comprador no postman
Perceba que apenas o teste deste método já cobre uma boa parte do código: Testa os atributos das duas classes associadas ao carrinho (Comprador e Produto) e verifica se as duas não estão nulas. Além disso, a resposta da requisição HTTP também é testada, isso garante que não retorne uma resposta diferente da que fio configurada no método POST em controller. É importante que cada teste dentro dos Assertions seja feito com muito cuidado e atenção para garantir uma cobertura de 100% do sistema.