java - 如何在黄瓜步骤中正确使用 Builder 模式
问题描述
我目前正在使用 Cucumber bdd 场景来构建和发送请求,然后确保响应正常。
我想使用 Builder 模式来构建我的请求,但我不确定我是否正确使用它。
这是我使用 lombok 构建器的搜索类的示例。
@Builder()
@Data
@Getter
public class Search {
private Preferences preferences;
private String pos;
private String languageCode;
@Singular("traveler")
private List<Traveler> traveler;
}
这是一个 Preferences 类的示例,它是 Search 类的一部分。注意这里我不使用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();
}
所以要多解释一点。我知道当用户发送一个 Search 对象时,他们总是需要添加一个带有 Bar 字符串集的 Preference。我也知道用户有时会希望在发送搜索请求之前添加更多首选项,因此 userAddsPerferences 步骤将用于某些测试但不是全部(注意:我只在 Preferences 中添加了两个字段来说明问题)
我最初将 lombok 构建器添加到 Search 使用的所有对象类中,但后来我找不到将 Preferences 对象的创建分散到多个步骤的方法。
可以跨步骤(如果需要)构建像这样的较小对象,使用链式设置器,然后使用构建器模式构建主请求对象吗?
或者我是否过度考虑了 Builder 模式的使用,以及我从模式中使用的所有整洁的链式设置器?
解决方案
推荐阅读
- regex - 如何使用交替和替换来执行 Perl 正则表达式
- javascript - 带有特殊字符的正则表达式问题
- html - 在使用 BEM(块、元素、修饰符)命名约定时,是否必须将类名应用于 HTML 中的每个元素?
- php - 响应必须包含 AMP-Access-Control-Allow-Source-Origin 标头?
- php - Laravel 错误:函数 Illuminate\Database\Eloquent\Model::setAttribute() 的参数太少
- spring-boot - Springboot如何锁定libs的版本,比如Rails的Gemfile.lock?
- c# - 创建按钮并将其放置在某些 xaml 窗口上而不使用 xaml 代码
- php - 尝试使用 PHP 根据服务器时间显示不同的横幅图像
- pagespeed-insights - 如何从我的国家获得访问结果?
- html - XSL:如何在样式表中使用 HTML 标签?