Un conjunto de pruebas bien escrito tendrá varias pruebas para una característica específica. Al agrupar características relacionadas, puede expresar la relación entre varios grupos de pruebas. Uno de los principales beneficios de agrupar clases de pruebas unitarias es que puede reducir la cantidad de código de prueba que escribe, ya que las pruebas agrupadas comparten recursos.
JUnit 5 le permite crear pruebas anidadas utilizando la anotación @Nested. En este artículo, aprenderá qué es la anotación @Nested y cómo usarla.
¿Qué es una prueba anidada?
La anotación @Nested de JUnit indica que la clase con la que se asocia es una clase interna, que es miembro de otra clase. Una prueba anidada es una clase de prueba que contiene la anotación @Nested, ya que esto significa que hay una (o más) clase interna dentro de una clase de prueba de nivel superior. Una clase anidada puede aparecer dentro de una clase de nivel superior o dentro de una clase que también está anidada.
Creación de clases de Java para probar
Una clase de prueba anidada hereda todas las características de su clase principal. Por lo tanto, el mejor momento para crear una prueba anidada es cuando existe una agrupación lógica de casos de prueba o cuando un solo caso de prueba tiene características diferentes. Un buen ejemplo de esto es cuando desea probar la capacidad de una clase para crear objetos útiles. Otro ejemplo es cuando un solo método tiene dos o más propósitos.
Aquí hay una clase de ejemplo que podría usar en una aplicación minorista, que demuestra cómo puede crear una prueba anidada.
públicoclaseCliente{
protegidoEn t Identificación del cliente;
protegido Cadena nombre del cliente;
protegido Cadena código de cliente;// Constructor predeterminado
públicoCliente(){
este.id_cliente = 0;
este.nombreCliente = "";
este.CódigoCliente="";
}// constructor principal
públicoCliente(En t IDcliente, cadena nombrecliente, cadena códigocliente){
este.IdCliente = IdCliente;
este.nombreCliente = nombreCliente;
este.codigocliente = codigocliente;
}// copiar constructor
públicoCliente(cliente cliente){
este.customerId = cliente.customerId;
este.nombre_cliente = cliente.nombre_cliente;
este.CódigoCliente = cliente.CódigoCliente;
}// captadores y definidores
públicoEn tgetCustomerId(){
devolver Identificación del cliente;
}públicovacíosetCustomerId(En t Identificación del cliente){
este.IdCliente = IdCliente;
}público Cadena getCustomerName(){
devolver Nombre del cliente;
}públicovacíoestablecerNombreDeCliente(Cadena de nombre del cliente){
este.nombreCliente = nombreCliente;
}público Cadena obtenerCódigoCliente(){
devolver código de cliente;
}públicovacíoestablecerCódigoCliente(Cadena de código de cliente){
este.codigocliente = codigocliente;
}// determinar un porcentaje de descuento del cliente basado en el tipo de cliente
públicodobletipo de cliente(Cadena de código de cliente){
doble descuento = 0;si (CódigoCliente.toLowerCase().equals("pre")) {
descuento = 0.10;
} demássi (CódigoCliente.toLowerCase().equals("gen")) {
descuento = 0.02;
} demássi (CódigoCliente.toLowerCase().equals("nuevo")) {
descuento = 0.05;
}devolver descuento;
}
// determinar el total general de un cliente según el tipo de cliente
públicodoblegran total(doble total){
doble descuento = tipoCliente (CódigoCliente);
doble descuentoPorcentaje = total * descuento;
doble finalTotal = total - descuentoPorcentaje;
devolver totalfinal;
}
}
Esta clase de Cliente contiene todos los componentes de una Clase Java, completa con dos métodos.
Creación de una prueba anidada con JUnit 5
La clase Customer tiene varios constructores, getters y setters, y dos métodos. Puede crear una clase anidada (dentro de la clase de prueba Cliente) que crea un nuevo objeto Cliente y prueba todos sus componentes.
importarestáticoorganización.junit.Júpiter.api.Afirmaciones.*;
importarorganización.junit.Júpiter.api.Nombre para mostrar;
importarorganización.junit.Júpiter.api.Anidado;
importarorganización.junit.Júpiter.api.Prueba;@DisplayName("Clase de prueba del cliente que muestra cómo CrearAnidado Pruebas.")
claseprueba de cliente{
protegidoEn t idcliente = 301;
Cadena protegida nombre del cliente = "mike wilson";
Cadena protegida código de cliente = "Pre";
protegidodoble totales = 600;@Anidado
@Nombre para mostrar("Clase de prueba anidada de Customer Builder dentro de una clase de prueba de nivel superior")
claseCustomerBuilderTest{
cliente cliente = nuevo Cliente (IdCliente, NombreCliente, CódigoCliente);
doble grandTotal = cliente.grandTotal (total);
@Prueba
@Nombre para mostrar("Probar al cliente's Constructores de clases, getters y setters, y métodos.")
vacíoclienteconstructor(){
afirmarTodo(() -> {
afirmarIgual(Identificación del cliente, cliente.getCustomerId());
afirmarIgual(Nombre del cliente, cliente.getCustomerName());
afirmarIgual(código de cliente, cliente.getCustomerCode());
afirmarIgual(0.10, cliente.tipo de cliente(código de cliente));
afirmarEquals (540, grandTotal);
});
}
}
}
La clase CustomerTest es la clase de prueba de nivel superior para una clase CustomerBuilderTest anidada. CustomerBuilderTest crea un nuevo objeto Cliente y prueba sus componentes usando pruebas de afirmación.
La ejecución de la clase de prueba CustomerTest produce los siguientes resultados de prueba exitosos:
Los nombres de las clases de prueba y el método de prueba son descriptivos y completos, gracias a la Anotación @DisplayName.
Saber cómo probar el software es crucial
La tecnología es un aspecto importante de la vida cotidiana para la mayoría de las personas. Lo que está en juego para crear software que haga exactamente lo que se supone que debe hacer nunca ha sido tan alto.
Un coche autónomo que calcula mal su proximidad a otro objeto puede provocar un accidente grave. Por lo tanto, debe probar su aplicación en cada etapa de su desarrollo.