Вам может понравиться этот шаблон:
private final Map<String,String> addressMap = new HashMap<>();
@Given("^a basic street address$")
public void aBasicStreetAddress(Map<String,String> address) {
addressMap.putAll(address);
}
@When("^I specify Country \"(.+)\"$")
public void iSpecifyCountry(String inputCountry) {
addressMap.put("country", inputCountry);
}
@Then("^I can print the complete address$")
public void iCanPrintTheCompleteAddress() {
System.out.println("\n\t" + addressMap.get("streetAddress"));
System.out.println("\t" + addressMap.get("cityName"));
System.out.println("\t" + addressMap.get("stateName"));
System.out.println("\t" + addressMap.get("postalCode"));
System.out.println("\t" + addressMap.get("country") + "\n");
}
Вместо установки addressMap на данном шаге мы сначала определяем его как пустую карту. Это гарантирует, что всегда присутствует разумный подарок по умолчанию. Это делает шаги более гибкими, поскольку теперь их можно использовать в любом порядке и несколько раз. По общему признанию, имеет небольшую ценность в этом конкретном сценарии, но в целом довольно полезно
Затем на данном шаге мы устанавливаем последний параметр на Map<String,String> address
. Огурец превратит DataTable
в карту. Мы используем .putAll
для копирования всех полей из address
в addressMap
.
address
является неизменным, чтобы предотвратить изменение исходного ввода методами с побочными эффектами. Это полезный механизм, когда исходные данные используются позже для создания утверждений. Если объект не был явно скопирован, вы можете положиться на тот факт, что он не был изменен. Это облегчает чтение кода.
В моем существующем проекте cucumber-jvm: 2.4.0 используется простой шаблон проектирования, в котором я передаю таблицу в шаг, последний параметр которого имеет тип Map. Это поведение больше не поддерживается в версии 3.
Это поведение все еще поддерживается. Что заставило вас думать, что это не так?
закрытый окончательный реестр DataTableTypeRegistry = новый DataTableTypeRegistry (Locale.ENGLISH);
закрытый финальный конвертер TableConverter = new DataTableTypeRegistryTableConverter (реестр);
приватный статический финал Тип MAP_OF_STRING_TO_STRING = new TypeReference> () {
} .GetType (); * * 1 023
Тебе здесь не нужно. Взгляните на TypeRegistryConfigurer . Хотя имейте в виду, что у карт и списков основных типов есть встроенная поддержка.