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

How to test when bean is using a custom 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");

您可以自定义构建器 class 以获得您想要的任何访问级别。 Lombok 默认设置 public 如果您不自定义它。

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

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

因此,要么创建自定义生成器 class public,要么更改您的测试。