Я недавно обновил до последней версии 4.x cucumber-jvm в своем проекте, чтобы использовать функцию параллельного выполнения cucumber.Но сейчас я сталкиваюсь с этой проблемой, связанной с наличием пользовательского типа данных в качестве параметра.Ранее у нас был интерфейс под названием Transformer
, который мы можем реализовать для пользовательских типов данных, теперь в последней версии я нашел интерфейс TypeRegistryConfigurer
, который необходимо реализовать.Но это не признание шага, как я ожидал.Подробности следующие:
Шаг огурца:
Given user gets random(3,true,true) parameter
Степень определения:
@Given("user gets {random} parameter")
public void paramTest(RandomString randomString) {
System.out.println(randomString.string);
}
Класс RandomString:
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));
}
}
ТипRegistryImpl:
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)
);
}
}