首页 > 解决方案 > 如何在黄瓜步骤中正确使用 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 模式的使用,以及我从模式中使用的所有整洁的链式设置器?

标签: javaautomated-testscucumberbuilder

解决方案


推荐阅读