entrada parametrizar Junit y la afirmación

Tratando duro :

Tengo pruebas similiar al único valor / afirmación de entrada difieren:

@Test
void test1() {
    // Given:
    val request = Request
            .builder()
            .totalAmount(new BigDecimal("160000"))
            .termInYears(20)
            .familySize(2)
            .incomeAmount(new BigDecimal("4000"))
            .costOfLiving(BigDecimal.ZERO)
            .build();

    // When:
    Result result =
            facade.getLoanAmount(request);

    // Then:
    result.getSimulations().forEach(simulation -> {
        if(simulation.getVariantCode().equals(Variant.A)) {
            assertThat(simulation.getInstallmentAmount().compareTo(new BigDecimal("720")) == 0);
            assertThat(simulation.getInterestRate().compareTo(new BigDecimal("0.0321")) == 0);
            assertThat(simulation.getLoanAmount().compareTo(new BigDecimal("127390")) == 0);
            assertThat(simulation.getNumberOfInstallmentsInMonths() == 240);
        } if(simulation.getVariantCode().equals(Variant.B)) {
            assertThat(simulation.getInstallmentAmount().compareTo(new BigDecimal("720")) == 0);
            assertThat(simulation.getInterestRate().compareTo(new BigDecimal("0.0321")) == 0);
            assertThat(simulation.getLoanAmount().compareTo(new BigDecimal("127390")) == 0);
            assertThat(simulation.getNumberOfInstallmentsInMonths() == 240);
        } if(simulation.getVariantCode().equals(Variant.C)) {
            assertThat(simulation.getInstallmentAmount().compareTo(new BigDecimal("720")) == 0);
            assertThat(simulation.getInterestRate().compareTo(new BigDecimal("0.0321")) == 0);
            assertThat(simulation.getLoanAmount().compareTo(new BigDecimal("127390")) == 0);
            assertThat(simulation.getNumberOfInstallmentsInMonths() == 240);
        }
    });
}

@Test
void test2() {
    // Given:
    val request = Request
            .builder()
            .totalAmount(new BigDecimal("200000"))
            .termInYears(20)
            .familySize(2)
            .incomeAmount(new BigDecimal("4000"))
            .costOfLiving(BigDecimal.ZERO)
            .build();

    // When:
    Result result =
            facade.getLoanAmount(request);

    // Then:
    result.getSimulations().forEach(simulation -> {
        if(simulation.getVariantCode().equals(Variant.A)) {
            assertThat(simulation.getInstallmentAmount().compareTo(new BigDecimal("720")) == 0);
            assertThat(simulation.getInterestRate().compareTo(new BigDecimal("0.0321")) == 0);
            assertThat(simulation.getLoanAmount().compareTo(new BigDecimal("127390")) == 0);
            assertThat(simulation.getNumberOfInstallmentsInMonths() == 240);
        } if(simulation.getVariantCode().equals(Variant.B)) {
            assertThat(simulation.getInstallmentAmount().compareTo(new BigDecimal("720")) == 0);
            assertThat(simulation.getInterestRate().compareTo(new BigDecimal("0.0321")) == 0);
            assertThat(simulation.getLoanAmount().compareTo(new BigDecimal("127390")) == 0);
            assertThat(simulation.getNumberOfInstallmentsInMonths() == 240);
        } if(simulation.getVariantCode().equals(Variant.C)) {
            assertThat(simulation.getInstallmentAmount() == null);
            assertThat(simulation.getInterestRate() == null);
            assertThat(simulation.getLoanAmount()== null);
            assertThat(simulation.getNumberOfInstallmentsInMonths() == 240);
        }
    });
}

Este código funciona bien, pero me pregunto cómo escribir el código nicier. Yo sé que hay @ParameterizedTestpero no estoy seguro de que esto reducirá línea de código en este escenario y cómo proporcionar entrada / salida allí? Cuál sería el mejor enfoque? Tengo que escribir muchos más de pruebas como la que entonces pienso que proporciona entrada / salida para muchas pruebas sería bueno. En Spock sería una buena mesa, pero tengo que utilizar otra herramienta.

OhleC:

Si está utilizando JUnit 5 (ParameterizedTests en 4 son muy diferentes, sino que también hacen que sea posible), algo como esto debería funcionar:

@ParameterizedTest
@MethodSource("arguments")
void test(Request input, BigDecimal result) {
 // ...
}

public static Stream<Arguments> arguments() {
    r1 = Request.builder().build(); // add request configuration here
    r2 = Request.builder().build(); // ... and here
    return Stream.of(
       Arguments.of(r1, new BigDecimal("720")),
       Arguments.of(r2, null)
    );
}

Este artículo se recopila de Internet, indique la fuente cuando se vuelva a imprimir.

En caso de infracción, por favor [email protected] Eliminar

Editado en
0

Déjame decir algunas palabras

0Comentarios
Iniciar sesiónRevisión de participación posterior

Artículos relacionados

Parametrizar tanto de clase y las pruebas en JUnit 5

Parametrizar la aplicación web con los parámetros de Jenkins, Maven y JVM

No se puede parametrizar el enlace y dar como href a la ubicación del marco mencionada

usando pandas y numpy para parametrizar el número de usuarios y la reputación de stack overflow

Parametrizar la configuración del resorte

Error de afirmación: sin valor para la ruta JSON en la prueba JUnit

La afirmación no funciona

La asignación dinámica básica y la eliminación desencadenan una afirmación fallida

Simulación de salida JUnit para la entrada dada

Afirmación y cardinalidad establecida

Afirmación y cardinalidad establecida

Python y OpenCV: la afirmación falló con la cámara IP en el archivo Exe

Python y OpenCV: la afirmación falló con la cámara IP en el archivo Exe

Relación de OpenAM entre firmar la respuesta y afirmación de SAML

Diferenciar entre la entrada NaN y la entrada vacía con una entrada de tipo = "número"

¿Por qué el mensaje de afirmación opcional en assertEquals moverse hasta la última posición en Junit 5?

¿Qué hace la palabra clave de afirmación de Java y cuándo debe usarse?

Pruebas unitarias de F # y afirmación sobre la coincidencia de patrones

Afirmación de la fecha y hora del cuerpo de respuesta en Postman

La prueba del transportador no tiene salida de prueba y afirmación, sino que solo tiene especificaciones

¿Cómo arreglar la afirmación no nula prohibida en mecanografiado y reaccionar?

Mokito no puede burlarse del método y la afirmación siempre falla

Error de afirmación (-215) npuntos> = 0 y error al extraer letras de la imagen captcha

Procesar la respuesta y afirmación de SAML IdP en el navegador

Afirmación de la fecha y hora del cuerpo de respuesta en Postman

Afirmación de la fecha y hora del cuerpo de respuesta en Postman

Parametrizar la construcción de una lista de Python

En Java, Cómo probar el método vacío en Junit Mockito con la afirmación?

Utilice la función SQL y la entrada en ActiveRecord

TOP Lista

CalienteEtiquetas

Archivo