Um conjunto de testes bem escrito terá vários testes para um recurso específico. Ao agrupar recursos relacionados, você pode expressar a relação entre vários grupos de testes. Um dos principais benefícios de agrupar classes de teste de unidade é que ele pode reduzir a quantidade de código de teste que você escreve, pois os testes agrupados compartilham recursos.
O JUnit 5 permite criar testes aninhados usando a anotação @Nested. Neste artigo, você aprenderá o que é a anotação @Nested e como usá-la.
O que é um teste aninhado?
A anotação @Nested do JUnit sinaliza que a classe associada é uma classe interna, que é membro de outra classe. Um teste aninhado é uma classe de teste que contém a anotação @Nested, pois isso significa que há uma (ou mais) classe interna dentro de uma classe de teste de nível superior. Uma classe aninhada pode aparecer em uma classe de nível superior ou em uma classe que também esteja aninhada.
Criando classes Java para testar
Uma classe de teste aninhada herda todos os recursos de sua classe pai. Portanto, o melhor momento para criar um teste aninhado é quando há um agrupamento lógico de casos de teste ou quando um único caso de teste possui recursos diferentes. Um bom exemplo disso é quando você deseja testar a capacidade de uma classe de criar objetos úteis. Outro exemplo é quando um único método tem dois ou mais propósitos.
Aqui está uma classe de exemplo que você pode usar em um aplicativo de varejo, que demonstra como você pode criar um teste aninhado.
públicoaulaCliente{
protegidoint Identificação do Cliente;
protegido String nome do cliente;
protegido String codigocliente;// construtor padrão
públicoCliente(){
esse.customerId = 0;
esse.nomedocliente = "";
esse.customerCode ="";
}// construtor primário
públicoCliente(int customerId, String customerName, String customerCode){
esse.customerId = customerId;
esse.customerName = customerName;
esse.clientCode = customerCode;
}// copia o construtor
públicoCliente(cliente cliente){
esse.customerId = customer.customerId;
esse.clienteNome = cliente.clienteNome;
esse.customerCode = customer.customerCode;
}// getters e setters
públicointgetCustomerId(){
retornar Identificação do Cliente;
}públicovaziosetCustomerId(int Identificação do Cliente){
esse.customerId = customerId;
}público Corda getCustomerName(){
retornar nome do cliente;
}públicovaziosetCustomerName(String customerName){
esse.customerName = customerName;
}público Corda getCustomerCode(){
retornar Código do Consumidor;
}públicovaziosetCustomerCode(String customerCode){
esse.clientCode = customerCode;
}// determina uma porcentagem de desconto do cliente com base no tipo de cliente
públicodobroTipo de Cliente(String customerCode){
dobro desconto = 0;se (customerCode.toLowerCase().equals("pré")) {
desconto = 0.10;
} outrose (customerCode.toLowerCase().equals("gen")) {
desconto = 0.02;
} outrose (customerCode.toLowerCase().equals("novo")) {
desconto = 0.05;
}retornar desconto;
}
// determina o grandTotal de um cliente com base no tipo de cliente
públicodobrototal geral(dobro total){
dobro desconto = customerType (customerCode);
dobro descontoPercentagem = total * desconto;
dobro finalTotal = total - descontoPorcentagem;
retornar finalTotal;
}
}
Essa classe Customer contém todos os componentes de uma classe Java completa com dois métodos.
Criando um teste aninhado com JUnit 5
A classe Customer tem vários construtores, getters e setters, e dois métodos. Você pode criar uma classe aninhada (dentro da classe de teste Customer) que cria um novo objeto Customer e testa todos os seus componentes.
importarestáticoorganização.junit.Júpiter.api.Afirmações.*;
importarorganização.junit.Júpiter.api.Nome de exibição;
importarorganização.junit.Júpiter.api.Aninhado;
importarorganização.junit.Júpiter.api.Teste;@DisplayName("Classe de teste do cliente mostrando como CriarAninhado Testes.")
aulaCustomerTest{
protegidoint idcliente = 301;
string protegida nome_cliente = "Mike Wilson";
string protegida customerCode = "Pré";
protegidodobro total = 600;@Nested
@Nome de exibição("Classe de teste aninhada do construtor de clientes dentro de uma classe de teste de nível superior")
aulaCustomerBuilderTest{
cliente cliente = novo Cliente (customerId, customerName, customerCode);
dobro grandTotal = cliente.grandTotal (total);
@Teste
@Nome de exibição("Testando o Cliente's Construtores de classe, getters e setters e métodos.")
vazioclienteBuilder(){
assertAll(() -> {
assertEquals(Identificação do Cliente, cliente.getCustomerId());
assertEquals(nome do cliente, cliente.getCustomerName());
assertEquals(Código do Consumidor, cliente.getCustomerCode());
assertEquals(0.10, cliente.Tipo de Cliente(Código do Consumidor));
assertEquals (540, grandTotal);
});
}
}
}
A classe CustomerTest é a classe de teste de nível superior para uma classe CustomerBuilderTest aninhada. CustomerBuilderTest cria um novo objeto Customer e testa seus componentes usando testes de assertividade.
A execução da classe de teste CustomerTest produz os seguintes resultados de teste bem-sucedidos:
Os nomes das classes de teste e o método de teste são descritivos e abrangentes, graças ao Anotação @DisplayName.
Saber como testar o software é crucial
A tecnologia é um aspecto importante da vida cotidiana para a maioria das pessoas. As apostas para a criação de um software que faz exatamente o que deve fazer nunca foram tão altas.
Um carro autônomo que calcula mal sua proximidade com outro objeto pode causar um acidente grave. Portanto, você precisa testar seu aplicativo em cada estágio de seu desenvolvimento.