提问者:小点点

如何测试bean何时使用自定义Lombok Builder


以下代码适用于我的bean将Lombok Builder注释与自定义构建器一起使用的情况。

当我想用值创建这个bean时,我在测试方面遇到了问题。由于自定义构建器,我不能再使用Setters(有意),也不能只使用. builder()。

我的问题是,如何在我的测试中创建这个bean?请注意,我确实想使用构建器,而不是希望使用Lombok的@Value注释。自定义构建器是与Jackson一起工作所必需的。

我能想到的一种可能性是在自定义构建器中添加一个构造函数,希望我不需要仅仅为了测试而这样做。

请指教。谢谢。

工作Bean设置。

@Getter
@JsonDeserialize(builder = MyData.MyDataBuilder.class)
@Builder(builderClassName = "MyDataBuilder", toBuilder = true)
public class MyData {
    @JsonProperty("some_key")
    private String skey;
    @JsonProperty("name")
    private String name;

    // needed to work with Jackson
    @JsonPOJOBuilder(withPrefix = "")
    static class MyDataBuilder {}
}

尝试创建对象进行测试。以下操作无法如上所述工作。

MyData.builder()
    .skey("12345")
    .name("some_name")
    .build();

MyData myData = new MyData();
myData.skey("12345");
myData.name("some_name");

共1个答案

匿名用户

您可以自定义构建器类以具有您想要的任何访问级别。如果您不自定义它,Lombok默认将其设为public

如果类本身和至少一个构造函数是public,则可以从任何地方(而不仅仅是同一个包)创建实例。但是在大多数情况下,构建器类也没有理由不应该是public:如果构建器模式在其包中是有益的,那么它可能也会在其他任何地方都是有益的。

如果您不希望您的类在其他包中实例化,那么构建器不应该是public(也没有构造函数)。但是,那么您的测试也存在某种缺陷或在错误的包中。

因此,要么使自定义构建器类public,要么更改您的测试。