Cómo pasar el tipo de datos personalizados a stepdef pepino-JVM en la última versión 4.x

Mrunal Gosar:

He actualizado recientemente a la última versión 4.x de pepino-JVM en mi proyecto con el fin de aprovechar función de la ejecución en paralelo de pepino. Pero estoy frente a este problema ahora con respecto al tipo de datos personalizado que tiene como parámetro. Anteriormente hemos tenido una interfaz llamada Transformerla que podemos aplicar para este tipo de datos personalizados, ahora en la versión más reciente que he encontrado TypeRegistryConfigurerinterfaz que debe ser implementado. Pero no está reconociendo el paso como yo hubiera esperado. Detalles de la siguiente manera:

Pepinillo Paso:

Given user gets random(3,true,true) parameter

StepDefinition:

@Given("user gets {random} parameter")
public void paramTest(RandomString randomString) {
    System.out.println(randomString.string); 
}

RandomString clase:

public class RandomString {

public String string;

public RandomString(String string) {
    Matcher m = Pattern.compile("random\\((.?)\\)").matcher(string);
    String t = "";
    while (m.find()) {
        t = m.group(1);
    }
    boolean isAlpha = true, isNum = true;
    if (t.length() > 0) {
        String[] placeholders = t.split(",");
        if (placeholders.length == 3) {
            int count = Integer.parseInt(placeholders[0]);
            isAlpha = Boolean.valueOf(placeholders[1]);
            isNum = Boolean.valueOf(placeholders[2]);
            this.string = string.replaceAll("random(.*)", RandomStringUtils.random(count, isAlpha, isNum));
        }
    }
    this.string = string.replaceAll("random(.*)", RandomStringUtils.random(3, isAlpha, isNum));
}
}

TypeRegistryImpl:

public class TypeRegistryConfiguration implements TypeRegistryConfigurer {
    @Override
    public Locale locale() {
        return Locale.ENGLISH;
    }

    @Override
    public void configureTypeRegistry(TypeRegistry typeRegistry) {
        typeRegistry.defineParameterType(new ParameterType<>(
                "random",
                "random([0-9],true|false,true|false)",
                RandomString.class,
                RandomString::new)
        );
    }
}
Mrunal Gosar:

He encontrado la solución después de ensayo y éxito e ir a través de algunos ejemplos de algunas pruebas unitarias en el proyecto de pepino-JVM.

Modificado StepDef :

@Given("user gets {random} parameter")
public void paramTest(String randomString) {
    System.out.println(randomString.string); 
}

TypeRegistryConfigurer Implementación:

import cucumber.api.TypeRegistry;
import cucumber.api.TypeRegistryConfigurer;
import io.cucumber.cucumberexpressions.CaptureGroupTransformer;
import io.cucumber.cucumberexpressions.ParameterType;
import org.apache.commons.lang3.RandomStringUtils;

import java.util.Locale;

public class TypeRegistryConfiguration implements TypeRegistryConfigurer {
    @Override
    public Locale locale() {
        return Locale.ENGLISH;
    }

    @Override
    public void configureTypeRegistry(TypeRegistry typeRegistry) {
        typeRegistry.defineParameterType(new ParameterType<>(
                "random",
                "random\\(([0-9]+),(true|false),(true|false)\\)",
                String.class,
                new CaptureGroupTransformer<>() {
                    @Override
                    public String transform(String[] args) {
                        return RandomStringUtils.random(Integer.parseInt(args[0]), Boolean.valueOf(args[1]), Boolean.valueOf(args[2]));
                    }
                })
        );
    }
}

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=204599&siteId=1
Recomendado
Clasificación