하루 전에 생각했던 Mapper Test code를 작성해보았다. 커스텀한 맵핑 규칙에 대해 테스트를 동작 하였고 전체적인 맵핑 메소드를 테스트 하였다. 아래는 작성해본 코드이다.
테스트 코드 작성하면서 입력이 Null로 들어왔을때에 대한 생각인데 Null일때 에러를 내는것이 좋은지 유연하게 Blank 값을 넣어주는게 좋은지 생각해봐야겠다.
또한 Jpa Entity 내 맵핑하는 변수가 Collection 객체일 경우를 생각해서 모두 final 변수로 두어 null값이 들어가지 않게 초기화하였다. 이 방법이 문제가 될만한 점이 있는지 생각해봐야겠다…
@SpringBootTest(classes = {DomainFactory.class, ObjectMapper.class, UserMapperImpl.class})
class UserMapperTest {
private static final Logger logger = LoggerFactory.getLogger(UserMapperTest.class);
@Autowired
private DomainFactory domainFactory;
@Autowired
private ObjectMapper objectMapper;
@Autowired
private UserMapper userMapper;
@Test
@DisplayName("createUserDTOToEntity 맵핑이 정삭적으로 동작 하는 테스트")
void createUserDTOToEntity() throws JsonProcessingException {
//given
CreateUserRequestDTO createUserRequestDTO = CreateUserRequestDTO.builder()
.name("testName")
.email("testEmail")
.pw("testPw")
.build();
//when
User user = userMapper.createUserDTOToEntity(createUserRequestDTO);
//then
logger.info(objectMapper.writeValueAsString(user));
assertThat(user.getName()).isEqualTo(createUserRequestDTO.getName());
assertThat(user.getEmail()).isEqualTo(createUserRequestDTO.getEmail());
}
@Test
@DisplayName("userToUserDetailDTO 맵핑이 정삭적으로 동작 하는 테스트")
void entityToUserDetailDTO() throws JsonProcessingException {
//given
long userId = 0L;
User user = domainFactory.createUser(userId);
int length = 3;
IntStream.range(0, length).forEach((i) -> {
StudyGroup studyGroup = domainFactory.createStudyGroup(i);
UserWordBook userWordBook = domainFactory.createUserWordBook(i);
Study study = Study.builder()
.id((long) i)
.studyGroup(studyGroup)
.user(user)
.build();
user.joinToStudy(study);
user.getUserWordBookList().add(userWordBook);
});
//when
UserDetailResponseDTO userDetailResponseDTO = userMapper.entityToUserDetailDTO(user);
//then
logger.info(objectMapper.writeValueAsString(userDetailResponseDTO));
assertThat(userDetailResponseDTO.getId()).isEqualTo(user.getId());
assertThat(userDetailResponseDTO.getEmail()).isEqualTo(user.getEmail());
assertThat(userDetailResponseDTO.getName()).isEqualTo(user.getName());
IntStream.range(0, length).forEach((i) -> {
UserDetailResponseDTO.StudyGroupDTO studyGroupDTO = userDetailResponseDTO.getStudyGroupList().get(i);
StudyGroup studyGroup = user.getStudyList().get(i).getStudyGroup();
assertThat(studyGroupDTO.getId()).isEqualTo(studyGroup.getId());
assertThat(studyGroupDTO.getName()).isEqualTo(studyGroup.getName());
UserDetailResponseDTO.WordBookDTO wordBookDTO = userDetailResponseDTO.getWordBookDTOList().get(i);
UserWordBook userWordBook = user.getUserWordBookList().get(i);
assertThat(wordBookDTO.getId()).isEqualTo(userWordBook.getId());
assertThat(wordBookDTO.getName()).isEqualTo(userWordBook.getName());
});
}
@Test
@DisplayName("User를 StudyGroupDTOList 맵핑이 정삭적으로 동작 하는 테스트")
void mapToStudyGroupDTOList() throws Exception {
//given
User user = domainFactory.createUser(0L);
int length = 5;
IntStream.range(0, length).forEach((i) ->{
StudyGroup studyGroup = domainFactory.createStudyGroup(i);
Study study = Study.builder()
.id((long)i)
.user(user)
.studyGroup(studyGroup)
.build();
user.getStudyList().add(study);
});
//when
List<UserDetailResponseDTO.StudyGroupDTO> studyGroupDTOList = userMapper.mapToStudyGroupDTOList(user);
//then
IntStream.range(0, length).forEach((i) ->{
UserDetailResponseDTO.StudyGroupDTO studyGroupDTO = studyGroupDTOList.get(i);
StudyGroup studyGroup = user.getStudyList().get(i).getStudyGroup();
assertThat(studyGroupDTO.getId()).isEqualTo(studyGroup.getId());
assertThat(studyGroupDTO.getName()).isEqualTo(studyGroup.getName());
});
}
@Test
@DisplayName("userWordBookList를 userWordBookDTOList로 맵핑이 정삭적으로 동작 하는 테스트")
void mapToWordBookDTOList() {
//given
List<UserWordBook> userWordBookList = new ArrayList<>();
int length = 5;
IntStream.range(0, length).forEach((i) ->{
userWordBookList.add(domainFactory.createUserWordBook(i));
});
//when
List<UserDetailResponseDTO.WordBookDTO> wordBookDTOList = userMapper.mapToWordBookDTOList(userWordBookList);
//then
IntStream.range(0, length).forEach((i) ->{
UserDetailResponseDTO.WordBookDTO wordBookDTO = wordBookDTOList.get(i);
UserWordBook userWordBook = userWordBookList.get(i);
assertThat(wordBookDTO.getId()).isEqualTo(userWordBook.getId());
assertThat(wordBookDTO.getName()).isEqualTo(userWordBook.getName());
});
}
}