Test Maven con JUnit 5

De ChuWiki


Breve descripción de JUnit 5[editar]

La principal característica de JUnit 5 frente a JUnit 4 es que se ha dividido en módulos. Una base para correr los test y luego implementaciones concretas. Hay dos principalmente

  • junit-jupiter-engine: Es para la creación de nuevos test usando JUnit 5
  • junit-vintage-engine: Nos permite correr antiguos test de JUnit 4 usando JUnit 5, sin necesidad de modificarlos.

Ambas son compatibles, de decir, podríamos poner ambas como dependencias de test en nuestro proyecto Maven y podríamos escribir tests tanto con la sintaxis de JUnit 4 como conla sintaxis de JUnit 5. Esto es útil para antiguos proyectos en los que tengamos test en JUnit 4 que queramos ir migrando poco a poco a JUnit 5.

Dependencias Maven para JUnit 5[editar]

Las dependencias, según queramos una u otra, o ambas a la vez, serían

<project>
    ...
    <dependencies>
        <dependency>
            <groupId>org.junit.vintage</groupId>
            <artifactId>junit-vintage-engine</artifactId>
            <version>5.10.1</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-engine</artifactId>
            <version>5.10.1</version>
            <scope>test</scope>
        </dependency>
        ...
    </dependencies>
    ...
</project>

Ejemplo de test JUnit 5 con Maven[editar]

En maven-junit5-example tienes el ejemplo completo. En ese proyecto Maven se utilizan ambas junit engine simultáneamente. CalculatorJupiterTest usa la nueva sintaxis de JUnit 5 mientras que CalculatorVintageTest utiliza la antigua.

Ponemos aquí el código de ambas. Fíjate que cambia ligeramente la sintaxis de las anotaciones y de los Assert. Fíjate sobre todo en los import.

package com.chuidiang.examples;

import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;

/**
 * @author Chuidiang
 * @date 11/11/2023
 */
public class CalculatorJupiterTest
{
    private Calculator calculator;

    @BeforeEach
    public void init(){
        calculator = new Calculator();
    }

    @Test
    public void shouldAdd()
    {
        Assertions.assertEquals(4, calculator.add(2,2), "Should Add Numbers" );
    }

    @Test
    public void shouldSubstract()
    {
        Assertions.assertEquals(0, calculator.substract(2,2), "Should Substract Numbers" );
    }

    @Test
    public void shouldMultiply()
    {
        Assertions.assertEquals(4, calculator.multiply(2,2), "Should Multiply Numbers" );
    }

    @Test
    public void shouldDivide()
    {
        Assertions.assertEquals(1, calculator.divide(2,2), "Should Divide Numbers" );
    }

}
package com.chuidiang.examples;


import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;

/**
 * @author Chuidiang
 * @date 11/11/2023
 */
public class CalculatorVintageTest
{
    private Calculator calculator;

    @Before
    public void init(){
        calculator = new Calculator();
    }

    @Test
    public void shouldAdd()
    {
        Assert.assertEquals("Should Add Numbers", 4, calculator.add(2,2) );
    }

    @Test
    public void shouldSubstract()
    {
        Assert.assertEquals("Should Substract Numbers", 0, calculator.substract(2,2) );
    }

    @Test
    public void shouldMultiply()
    {
        Assert.assertEquals("Should Multiply Numbers", 4, calculator.multiply(2,2) );
    }

    @Test
    public void shouldDivide()
    {
        Assert.assertEquals("Should Divide Numbers", 1, calculator.divide(2,2) );
    }

}

Puedes ver más detalles cómo usar JUnit en Maven