#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 автоматически вызовет этот конструктор и предоставит вам объект ввода.