[JUnit] JUnit5 Foundation 4: integración de Maven, pruebas parametrizadas, pruebas repetidas [Fin]

[JUnit] JUnit5 Foundation 4: integración de Maven, pruebas parametrizadas, pruebas repetidas [Fin]

Serie anterior:

  1. [JUnit] Conceptos básicos de JUnit5 1 - Uso de estructuras y aserciones de JUnit5
  2. [JUnit] Conceptos básicos de JUnit5 2 - Anotaciones de ciclo de vida y anotaciones de DisplayName
  3. [JUnit] Conceptos básicos de JUnit5 3: inyección de dependencia, asumir, habilitar/deshabilitar pruebas y pruebas anidadas

Integración Maven

Maven es una herramienta de gestión automatizada cuyos principales propósitos son:

  • Describir cómo se debe construir (construir) el software
  • Describir las dependencias del proyecto (dependencies)

Maven usa archivos XML para la gestión de proyectos y el nombre general del archivo de entrada es pom.xml.

Antes de que VSCode integre Maven, escribí notas: [VSCode] Configuración de Java JDK/JRE y proyecto de inicialización de Maven , no entraré en detalles aquí.

Dependencias Junit5

Para ejecutar Junit5, Maven debe configurar al menos las siguientes tres dependencias:

  • junit-jupiter-api

    Define la API de Junit

  • junit-jupiter-motor

    Caso de prueba para ejecutar Junit

  • maven-surefire-plugin

    Solía ​​​​ejecutar Junit en compilaciones maven

Y, Junit5 requiere JAVA8 o superior para ejecutarse, si desea ser compatible con Junit4, debe usar dependencias adicionales. Es relativamente engorroso configurar uno por uno. Junit también proporciona un agregador : JUnit Jupiter (Aggregator) , que integra otras dependencias requeridas de Junit, que incluyen:

  • junit-jupiter-api
  • junit-jupiter-params
  • junit-jupiter-motor
  • junit-bom

Prueba paramétrica

Además de las tres dependencias básicas, las pruebas parametrizadas también requieren la implementación de la dependencia junit-jupiter-params, por lo que se recomienda JUnit Jupiter (Aggregator) .

Pruebas parametrizadas con @ValueSource

@ValueSourceSe le pasará una matriz de matrices @ParameterizedTesty los tipos de parámetros que acepta incluyen:

  • corto
  • byte
  • En t
  • largo
  • flotar
  • doble
  • carbonizarse
  • java.lang.String
  • java.lang.Class

Supongamos que hay una clase que contiene una función para probar si un número entero es impar o no. El método de prueba se implementa de la siguiente manera:

package com.example;

import static org.junit.jupiter.api.Assertions.assertTrue;

import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.ValueSource;

public class OddNumberTest {
    
    
    @ParameterizedTest
    @ValueSource(ints = {
    
    1,3,5,7,10})
    @Test
    void testOddNumber(int number) {
    
    
        OddNumber oddNum = new OddNumber();
        assertTrue(oddNum.isOdd(number));
    }
}

Los resultados son los siguientes:

fuente de valor

Como puede ver, todos los casos de prueba con números impares pasan, pero los casos de prueba con números pares fallan.

Pruebas parametrizadas con @EnumSource

@EnumSourceAcepta un conjunto de instancias de enumeración, como:

package com.example;

public enum ChessPiece {
    
    
    QUEEN,
    KING,
    KNIGHT,
    PAWN,
    ROOK,
}

Caso de prueba:

package com.example;

import static org.junit.jupiter.api.Assertions.assertNotNull;

import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.EnumSource;

public class EnumTest {
    
    
    @ParameterizedTest
    @EnumSource(ChessPiece.class)
    void testEnum(ChessPiece piece) {
    
    
        assertNotNull(piece);
    }
}

resultado de la operación:

enum-fuente

Personalmente, creo que enum es muy útil para realizar pruebas compatibles con varias bases de datos.

Pruebas parametrizadas con @MethodSource

@MethodSourceAdmite el uso de métodos de fábrica para pasar valores. Tenga en cuenta que el método de fábrica debe ser un método estático, como:

package com.example;

import static org.junit.jupiter.api.DynamicTest.stream;

import java.util.stream.Stream;

import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.MethodSource;

public class MethodTest {
    
    
    @ParameterizedTest
    @MethodSource("paramProvider")
    void testMethodSource(String arg) {
    
    
        System.out.println(arg);
    }

    static Stream<String> paramProvider() {
    
    
        return Stream.of("para1", "para2");
    }
}

resultado de la operación:

método-fuente

Pruebas parametrizadas con @CsvSource

@CsvSourceAdmite pasar un conjunto de pares clave-valor separados por comas, como:

package com.example;

import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.CsvSource;

public class CsvMethod {
    
    
    @ParameterizedTest
    @CsvSource({
    
    "one, 1", "two, 2", "'test, test', 10"})
    void testCsvSource(String first, int second) {
    
    
        System.out.println(first + ", " + second);
    }
}

Los resultados son los siguientes:

csv-fuente

Pruebas parametrizadas con @CsvFileSource

@CsvFileSource@CsvSourceCasi lo mismo que , excepto que @CsvFileSourceacepta la dirección de ruta de un archivo CSV.

Repita la prueba

Muchos proyectos realizarán pruebas de estrés antes de lanzarse, y el método de usar pruebas repetidas en JUnit5 también es muy simple:

package com.example;

import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.RepeatedTest;

public class RepeatedTestExample {
    
    

	@RepeatedTest(name = "{displayName} - {currentRepetition}/{totalRepetitions}",
		value = 5)
	@DisplayName("Repeated Test")
	public void simpleRepeatedTest() {
    
    
		System.out.println("hello world");
	}
}

resultado de la operación:

prueba repetida

Tenga en cuenta que la palabra clave displayName, currentRepetition, totalRepetitionsse puede utilizar para identificar fácilmente la prueba que se está ejecutando actualmente.

Supongo que te gusta

Origin blog.csdn.net/weixin_42938619/article/details/120644582
Recomendado
Clasificación