Escriba pruebas de Java efectivas con bibliotecas de aserciones

Escriba pruebas de Java efectivas con bibliotecas de aserciones

Java tiene varias bibliotecas de aserciones que pueden ayudarlo a probar y depurar su código. En este artículo, veremos varias bibliotecas de aserciones y las compararemos.

Índice
  1. Conocimiento
    1. Unir
    2. PruebaNG
    3. Hamcrest
    4. aserJ
    5. Verdad
  2. Comparación

Conocimiento

Hay varias bibliotecas disponibles en el ecosistema de Java, incluidas algunas de las más populares: JUnit, Hamcrest, AssertJ, TestNG y Truth. Veamos cada uno de ellos: -

Unir

  • Junit es el marco de prueba más utilizado en Java.
  • Junit viene con muchos IDE populares como IntelliJ IDEA, Eclipse, NetBeans y Visual Studio Code y herramientas de compilación como Maven, Gradle y Ant.
  • Junit es el módulo de prueba predeterminado en Spring Boot Framework
  • Junit sirve como base para desarrollar y lanzar un marco de prueba en JVM
  • Junit proporciona métodos de aserción básicos.

Como desarrollador, debe usar Junit para escribir y ejecutar casos de prueba en Java la mayor parte del tiempo. Junit tiene métodos de afirmación limitados que son suficientes para escribir casos de prueba básicos. Debería considerar usar los métodos de aserción AssertJ o Hamcrest con el marco Junit para escribir condiciones de casos de prueba complejas.

Lea también Escritura de casos de prueba efectivos con JUnit en Java

import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;

public class MyClassTest {
    @Test
    public void testAddition() {
        int result = MyClass.add(2, 3);
        assertEquals(5, result);     // pass
        assertNotEquals(0, result);  // pass
        assertNotNull(result);       // pass
        assertTrue(result > 0);      // pass
    }
}

PruebaNG

  • TestNG es un marco de prueba inspirado en JUnit y NUnit, pero presenta nuevas funciones que lo hacen más potente y fácil de usar.
  • TestNG proporciona funciones más avanzadas que JUnit, como pruebas basadas en datos y ejecución de pruebas paralelas.
  • TestNG está diseñado para cubrir todas las categorías de pruebas: unitarias, funcionales, de extremo a extremo,...
import org.testng.Assert;

public class MyClassTest {
    @Test
    public void testAddition() {
        int result = MyClass.add(2, 3);
        Assert.assertEquals(result, 5);
    }
}

Hamcrest

  • Hamcrest es una biblioteca ampliamente utilizada que proporciona un conjunto de asignaciones para condiciones de prueba. Le permite escribir aserciones más complejas combinando comparadores usando operadores lógicos.
  • Los emparejadores de Hamcrest están disponibles en varios idiomas: Java, Python, Ruby, Obj-C, PHP, Erlang, Swift, Rust, JavaScript (JsHamcrest), JavaScript (Hamjest), GO (Gocrest) y C# (NHamcrest)
  • Hamcrest se puede usar con JUnit (todas las versiones) y TestNG
  • Hamcrest brinda la capacidad de escribir emparejadores personalizados para probar clases personalizadas

Lea también Escritura de casos de prueba efectivos con Hamcrest en Java

import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.equalTo;

public class MyClassTest {
    @Test
    public void testAddition() {
        int result = MyClass.add(2, 3);
        assertThat(result, equalTo(5));
    }
}

aserJ

  • AssertJ es una biblioteca de aserciones Java fluida que proporciona un amplio conjunto de aserciones y mensajes de error realmente útiles.
  • AssertJ se compone de varios módulos: -
    1. Módulo central para proporcionar aserciones para tipos de JDK (String, Iterable, Stream, Path, File, Map…)
    2. Módulo de guayaba para proporcionar aserciones para los tipos de guayaba (Multimapa, Opcional...)
    3. Módulo Joda Time para proporcionar aserciones para los tipos de Joda Time (DateTime, LocalDateTime)
    4. Módulo Neo4J para proporcionar aserciones para los tipos de Neo4J (ruta, nodo, relación...)
    5. Módulo DB para proporcionar aserciones para tipos de bases de datos relacionales (Tabla, Fila, Columna...)
    6. El módulo Swing proporciona una API simple e intuitiva para la prueba funcional de las interfaces de usuario de Swing.
  • AssertJ tiene una muy buena guía de inicio y documentación a seguir:- https://assertj.github.io/doc/
  • Las aserciones AssertJ se pueden usar con el marco Junit para probar condiciones complejas.
  • AssertJ está diseñado para ser súper fácil en su IDE favorito. Pegar assertThat seguido por el objeto bajo prueba y un punto... y cualquier finalización del código IDE de Java le mostrará todas las afirmaciones disponibles como esta:
    AssertJ asertar ese asistente de contenido
  • AssertJ afirmar que se puede usar así: -
    import org.junit.jupiter.api.Test;
    import static org.assertj.core.api.Assertions.assertThat;
    
    public class MyClassTest {
        @Test
        public void testAddition() {
            int result = MyClass.add(2, 3);
            assertThat(result).isEqualTo(5);     // pass
            assertThat(result).isNotZero();      // pass
            assertThat(result).isPositive();     // pass
            assertThat(result).isOdd();          // pass
            assertThat(result).isLessThan(6);    // pass
            assertThat(result).isGreaterThan(0); // pass
        }
    }
    
  • EL Assertions class es la única clase que necesita para comenzar a usar AssertJ, proporciona todos los métodos que necesita. Una importación de aserciones estáticas para controlarlas todas...
    import static org.assertj.core.api.Assertions.*;
    

    … o más si lo prefieres:

    import static org.assertj.core.api.Assertions.assertThat;  // main one
    import static org.assertj.core.api.Assertions.atIndex; // for List assertions
    import static org.assertj.core.api.Assertions.entry;  // for Map assertions
    import static org.assertj.core.api.Assertions.tuple; // when extracting several properties at once
    import static org.assertj.core.api.Assertions.fail; // use when writing exception tests
    import static org.assertj.core.api.Assertions.failBecauseExceptionWasNotThrown; // idem
    import static org.assertj.core.api.Assertions.filter; // for Iterable/Array assertions
    import static org.assertj.core.api.Assertions.offset; // for floating number assertions
    import static org.assertj.core.api.Assertions.anyOf; // use with Condition
    import static org.assertj.core.api.Assertions.contentOf; // use with File assertions
    

Lea también Escritura de casos de prueba efectivos con AssertJ en Java

Verdad

  • Truth es una biblioteca de afirmaciones desarrollada por el equipo de Guava en Google. Proporciona afirmaciones fluidas para Java y Android.
  • La verdad se utiliza en la mayoría de las pruebas a partir del propio código base de Google.
  • Truth está inspirado en AssertJ y encontrarás muchas similitudes entre Truth y AsserJ
  • La verdad proporciona menos afirmaciones en comparación con AssertJ
  • Similar a AsserJ, si está utilizando un IDE con autocompletado, le ofrecerá una lista de afirmaciones que puede hacer sobre el tipo dado.
import static com.google.common.truth.Truth.assertThat;

public class MyClassTest {
    @Test
    public void testAddition() {
        int result = MyClass.add(2, 3);
        assertThat(result).isEqualTo(5);
    }
}

Comparación

Cada biblioteca de aserciones tiene sus propias fortalezas y debilidades, y la mejor para su proyecto puede depender de sus necesidades específicas. JUnit es una buena opción si usa el marco de prueba JUnit, mientras que AssertJ y Truth son buenas opciones si busca una API más expresiva. Hamcrest es una buena opción si necesita una amplia gama de comparadores, y TestNG es una buena opción si necesita funciones de prueba más avanzadas. En última instancia, la elección de la biblioteca de aserciones se reducirá a las preferencias personales y las necesidades del proyecto.

Si quieres conocer otros artículos parecidos a Escriba pruebas de Java efectivas con bibliotecas de aserciones puedes visitar la categoría Tutoriales.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Subir

Esta página web utiliza cookies para analizar de forma anónima y estadística el uso que haces de la web, mejorar los contenidos y tu experiencia de navegación. Para más información accede a la Política de Cookies . Ver mas