Как преобразовать список строк из схемы сценария в объект

#java #cucumber

#java #огурец

Вопрос:

Есть ли способ преобразовать список строк из схемы сценария в объект, например :

 Scenario Outline: eligibility rules
    When I specify habitation details
      | <you_are> | <nature> | <pro> |

 Examples:
      | you_are| nature | pro |
      | PNO | Living | No |
      | PO | Pro | yes |
  

В :

 class Entry {
   String you_are;
   String nature;
   String pro ;
}

@When("I specify habitation details")
    public void specifyHabitationDetails(Entry entry) {
  

Я знаю, что вы можете передать список объектов, используя datatable, но это не то, что я хочу. Преимущество схемы сценария заключается в том, что каждая строка повторяется из чистого состояния.

Комментарии:

1. Зачем вам нужно конвертировать здесь? Cucumber использует РЕГУЛЯРНОЕ ВЫРАЖЕНИЕ для идентификации этих тестовых примеров, из которых вы можете создать класс в рамках теста; Я не думаю, что способ, которым вы пытаетесь это сделать, правильный.

Ответ №1:

Вы можете повторно использовать логин DataTable для примеров ScenarioOutline. Каждая строка в таблице примеров будет, как вы сказали, с чистого листа.

Измените определение функции и шага, чтобы использовать DataTable. Заголовок должен соответствовать именам переменных в вашем классе ввода, чтобы Cucumber автоматически создавал объект, также предоставьте конструктор 3 arg в классе ввода.

 When I specify habitation details
 | you_are   | nature   | pro   |
 | <you_are> | <nature> | <pro> |
  

Часть примеров остается прежней…

 @When("I specify habitation details")
    public void specifyHabitationDetails(List<Entry> entry) {

          Entry e = entry.get(0);
    }
  

Комментарии:

1. Спасибо, это работает! Единственная проблема заключается в том, что я получаю список <Запись> с одним элементом. Затем я должен ввести.get(0), чтобы получить мой объект. Есть ли способ получить непосредственно фактический объект? Всегда должен быть только один объект — список.

2. По умолчанию DataTable ищет несколько строк данных. Если вам напрямую нужен объект ввода, попробуйте немного взломать, передав строку с разделителями на шаг в файле функций. — Когда я указываю детали жилья <you_are>@<nature>@<pro>. Измените свое stepDefinition — public void specifyHabitationDetails(запись ввода). Создайте конструктор с одним аргументом в классе Entry со строкой с разделителями в качестве аргумента. Поместите логику для инициализации переменных. Cucumber автоматически вызовет этот конструктор и предоставит вам объект ввода.