Как правильно использовать шаблон конструктора с шагами огурца

#java #automated-tests #cucumber #builder

Вопрос:

В настоящее время я использую сценарии bdd Cucumber для создания и отправки запросов, а затем гарантирую, что ответ будет в порядке.

Я хотел использовать шаблон конструктора для создания своих запросов, но я не уверен, правильно ли я его использую.

Вот пример моего класса поиска, который использует lombok builder.

 @Builder() @Data @Getter public class Search {   private Preferences preferences;  private String pos;  private String languageCode;  @Singular("traveler")  private Listlt;Travelergt; traveler;  }  

а вот пример класса предпочтений, который является частью класса поиска. Обратите внимание, что здесь я не использую lombok builder

 @Accessors(chain = true) @Setter public class Preferences {  private String foo;  private String bar;   }  

Вот пример моих определений шагов

 public class SearchSteps {  Preferences preferences = new Preferences();   @Given("^user adds perferences")  public void userAddsPerferences(String foo) throws Exception {  preferences.setFoo(foo);   }   @Given("^user sends search$")  public void user_sends_search(String bar) throws Exception {  preferences.setBar(bar);  Search search = Search.builder()  .preferences(preferences)  .languageCode("en")  .pos("test")  .build();  }  

Поэтому объясню немного подробнее. Я знаю, что когда пользователь отправляет объект поиска, ему всегда нужно будет добавить предпочтение с набором строк строки. Я также знаю, что пользователь иногда захочет добавить дополнительные настройки перед отправкой поискового запроса, поэтому шаг userAddsPerferences будет использоваться в некоторых тестах, но не во всех (Примечание: я добавил только два поля в настройки, чтобы проиллюстрировать проблему).

Первоначально я добавил строители ломбока ко всем классам объектов, которые использует Поиск, но затем я не смог найти способ распространить создание объекта предпочтений на несколько этапов.

Можно ли создавать такие объекты меньшего размера по шагам (при необходимости) с помощью цепных сеттеров, а затем создавать основной объект запроса с помощью шаблона компоновщика?

или я переосмысливаю использование шаблона Builder, и все ли аккуратные цепные сеттеры, которые я использую из шаблона?

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

1. Я не уверен, в чем именно заключается ваша проблема.. Вы спрашиваете о том, как разделить предпочтения между всеми возможными шагами в вашем сценарии?

2. Поэтому, если использовать конструктор ломбок, он создаст неизменяемые объекты, это означает, что я не могу распределить создание предпочтений по шагам, поэтому я удалил конструктор из этого класса, мне просто интересно, нормально ли это и должен ли я использовать конструктор только для конечного объекта поиска?