假设有以下 POJO:
@Getter
@Setter
public class UserRequest {
private String username;
private String password;
private String email;
}
现在我想为这个类生成各种测试数据。当某些字段没有明确设置时,应设置默认值。请记住我无法添加龙目岛@Builder
or @Builder.Default
到原来的类或者以其他方式修改.
所以我想出了以下辅助类:
public class UserRequestTestDataUtils {
public static final String DEFAULT_USERNAME = "foo";
public static final String DEFAULT_PASSWORD = "bar";
public static final String DEFAULT_EMAIL = "[email protected] /cdn-cgi/l/email-protection";
public static UserRequest createUserRequestWithUsername(String username) {
return createUserRequest(username, DEFAULT_PASSWORD, DEFAULT_EMAIL);
}
public static UserRequest createUserRequestWithPassword(String password) {
return createUserRequest(DEFAULT_USERNAME, password, DEFAULT_EMAIL);
}
public static UserRequest createUserRequestWithEmail(String email) {
return createUserRequest(DEFAULT_USERNAME, DEFAULT_PASSWORD, email);
}
public static UserRequest createUserRequestWithUsernameAndPassword(String username, String password) {
return createUserRequest(username, password, DEFAULT_EMAIL);
}
public static UserRequest createUserRequest(String username, String password, String email) {
final UserRequest userRequest = new UserRequest();
userRequest.setUsername(username);
userRequest.setPassword(password);
userRequest.setEmail(email);
return userRequest;
}
}
虽然这对于只有一些字段的类来说是可以的,但如果有更多字段并且对于测试数据的某些变化,它就会变得乏味。
我的第一个想法是使用 Lombok 的@Builder
在方法级别createUserRequest()
:
@Builder
public static UserRequest createUserRequest(String username, String password, String email) {
final UserRequest userRequest = new UserRequest();
userRequest.setUsername(username);
userRequest.setPassword(password);
userRequest.setEmail(email);
return userRequest;
}
这将允许以下操作:
UserRequestTestDataBuilder.builder()
.username("foo")
.password("bar")
.build();
但是,这不会设置任何默认值(在本例中email
)。是否有某种模式可以简化这种方法?