如何测试 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
,要么更改您的测试。
以下代码适用于我的 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
,要么更改您的测试。