以下代码在我的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");
您可以自定义构建器类以具有所需的任何访问级别。如果您不自定义Lombok,则默认将其设置为public
。
如果类本身和至少一个构造函数是public
,则可以从任何地方(不仅是同一包)创建实例。但是,在大多数情况下,也没有理由为什么构建器类也不应为public
:如果构建器模式在其程序包中是有益的,则在其他任何地方也可能都是有益的。
如果您不希望在其他包中实例化您的类,则构建器不应为public
(也不应为构造器)。但是,那么您的测试还是有缺陷或包装错误。
因此,使定制构建器类为public
,或更改测试。