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