Exercício sobre Junit
Abaixo, temos um exercício para praticar a criação de testes unitários com o framework Junit. O exercício consiste em criar testes para um sistema de logística que gerencia veículos e cargas.
Logistics
Você foi designado para criar testes unitários para a classe Vehicle
, que representa um veículo capaz de transportar cargas até um limite máximo de peso. A classe Vehicle
já está implementada, mas agora é necessário garantir que todas as funcionalidades do veículo estejam corretas por meio de testes unitários.
Instruções:
Examine a classe Vehicle
fornecida no projeto logistics. Ela possui três métodos: addWeight
, checkWeightLimit
, e um construtor. Crie uma classe de teste chamada VehicleTest
para testar os métodos da classe Vehicle
. Utilize o framework JUnit para escrever seus testes. Implemente pelo menos três cenários de teste para cada método da classe Vehicle
. Considere os seguintes casos:
- Adição de cargas ao veículo.
- Verificação do limite de peso com diferentes cargas.
- Verificação do limite de peso com um veículo vazio.
- Garanta que seus testes cubram todos os possíveis cenários e que os métodos da classe
Vehicle
estejam funcionando conforme o esperado.
Execute os testes e verifique se todos eles passam com sucesso. Caso algum teste falhe, depure o código da classe Vehicle
para corrigir o problema e execute os testes novamente até que todos passem.
Certifique-se de que seus testes abranjam uma variedade de casos de uso para garantir que o Vehicle
funcione corretamente em todas as situações. Isso inclui testar diferentes combinações de cargas e verificar se o limite de peso é respeitado. Certifique-se de que os nomes dos testes sejam descritivos e explicativos.
Código do projeto
Para obter um código inicial para o projeto, acesse o repositório do GitHub:
git clone -b dev https://github.com/rodrigoprestesmachado/vvs
code exemplos/logistics
Continuação do Logistics com Mockito
Imagine que o projeto evoluiu e você decidiu extrair a lógica de validação de peso para um serviço externo chamado WeightService
. Agora, a classe Vehicle
dependerá desse serviço para validar se o peso total é aceitável. Essa dependência será mockada com Mockito nos testes.
Nova interface WeightService.java:
/**
* Serviço responsável por validar regras de peso.
*/
public interface WeightService {
/**
* Verifica se o total de peso está dentro do limite permitido.
*/
boolean isWeightAllowed(int totalWeight, int maxWeightLimit);
}
Classe Vehicle.java modificada para usar o serviço:
public class Vehicle {
private int maximumWeightLimit;
private List<Load> loads = new ArrayList<>();
private WeightService weightService;
public Vehicle(int weightLimit, WeightService weightService) {
this.maximumWeightLimit = weightLimit;
this.weightService = weightService;
}
public void addWeight(Load load) {
loads.add(load);
}
public boolean checkWeightLimit() {
int total = loads.stream().mapToInt(Load::getWeight).sum();
// delega a verificação ao serviço externo
return weightService.isWeightAllowed(total, maximumWeightLimit);
}
public int getMaximumWeightLimit() {
return maximumWeightLimit;
}
public List<Load> getLoads() {
return loads;
}
}
Assim, você deve criar testes unitários para a classe Vehicle
usando Mockito para simular o comportamento de WeightService
.
Os testes devem cobrir os seguintes cenários:
- ✅ Peso dentro do limite
- O serviço retorna true para isWeightAllowed(…).
- O método checkWeightLimit() deve retornar true.
- Verifique que o mock foi chamado com os valores esperados.
- ❌ Peso acima do limite
- O serviço retorna false.
- O método checkWeightLimit() deve retornar false.
- ⚠️ Serviço lança exceção
- Simule que isWeightAllowed(…) lança uma exceção (RuntimeException).
- Verifique que a exceção é propagada corretamente.
Dicas para resolver o exercício com IA:
- Pergunte por explicações conceituais.
- Peça exemplos simples onde esse conceito é aplicado em outros problemas.
- Solicite analogias para entender melhor.
- Peça exemplos de código com explicações.
- Solicite ajuda para depuração de código.

CC BY 4.0 DEED