Cześć,
tworzę obiekt User
w klasie UserBuilder
do testów, korzystając z metody:
public User build() {
Role role = roleDAO.findByName(UserRole.ROLE_USER).orElseThrow(
() -> new RoleNotFoundException("Role not found"));
Set<Role> roles = Set.of(role);
User user = new User();
user.setId(id);
user.setUsername(username);
user.setEmail(email);
user.setPassword(encoder.encode("Password#3"));
user.setRoles(roles);
return user;
}
Następnie chcę ten obiekt zapisać w bazie danych. Czy powinienem zmodyfikować metodę build()
, zmienić typ na void
i dopisać zapis użytkownika?
Wyglądałoby to tak:
public void build() {
// tworzenie obiektu
int userId = userDAO.save(user);
user.getRoles().forEach(role -> userDAO.assignRoleToUser(userId, role.getId()));
}
Tutaj mam pewne obawy, bo builder
kojarzy mi się z tworzeniem obiektu, a nie też jego zapisywaniem.
Test:
@Test
void whenUserExist_DeleteUser() {
userBuilder.buildById(1).build();
userService.deleteUserById(1);
assertThat(userChecker.userExist(1)).isFalse();
}
Czy zostawić metodę build()
, która zwraca obiekt User
, i dopisać jakąś osobną klasę do zapisu użytkownika. Coś w stylu:
@Component
public class TestUserCreator {
@Autowired
private UserBuilder userBuilder;
@Autowired
private UserDAO userDAO;
public void createById(Integer id) {
User user = userBuilder.buildById(id).build();
int userId = userDAO.save(user);
user.getRoles().forEach(role -> userDAO.assignRoleToUser(userId, role.getId()));
}
}
Test:
@Test
void whenUserExist_DeleteUser() {
userCreator.createById(1);
userService.deleteUserById(1);
assertThat(userChecker.userExist(1)).isFalse();
}
Czy zastosować jeszcze jakieś inne rozwiązanie?
Dzięki za pomoc