사실 검색에 대한 테스트코드를 만드는 것은 간단하다.
리포지토리 테스트코드에서, 기능들을 그대로 가져다 쓰는 것과 동일하다 .
@BeforeEach
void createData() {
for(int index = 0; index < 10; index++){
RegisterRequestDto registerRequestDto = RegisterRequestDto.builder()
.username("testUser" + index)
.nickname("test" + index)
.email("test" + index + "@test.com")
.password("password" + index)
.passwordCheck("password" + index)
.build();
memberService.registerNewMember(registerRequestDto);
}
}
@Test
@DisplayName("전부 다 null값으로 검색하면 예외처리된다. ")
public void searchWithAllNull() throws Exception{
//given
//when
SearchMemberDto searchMemberDto = new SearchMemberDto(null, null, null);
//then
assertThatThrownBy(()-> memberService.search(searchMemberDto))
.isInstanceOf(NeedToAddSearchConditionException.class);
}
위의 메서드는 모든 데이터를 테스트전에 추가해주고,
아래의 메서드는 모두다 null일 경우를 구현한 것이다.
총 8가지 경우에 대한 테스트코드를 작성했다.
테스트를 만들었으니, 기능을 만들어야 하는데 진짜 별게 없다.
@Transactional(readOnly = true)
public List<SearchMemberDto> search(SearchMemberDto searchMemberDto){
return memberRepository.search(searchMemberDto);
}
(이럴려고 리포지토리에 더 갈아넣은거지~)
사실 자바로 구현한다고 해보면, 전체를 불러온 다음에, null이 아니면 입력변수와 같은 객체만 따로 뽑아 리스트로 반환하게 된다.
그렇게 하는 것 보단, 이게 더 깔끔하니까? 그리고 이게 서버의 메모리를 덜 쓰게 된다.
DB에서도 모든 멤버를 불러오는 것이 아니니, 데이터베이스에서도 시간을 덜 쓰게 된다.
이렇게 만든 코드의 테스트를 동작시켜보았다.
이렇게, 조회의 기능을 만들어보았다.
이제, 로그인 기능을 구현해야 하는데, 이를 또 다시 2개로 나눠야 할 것 같다.
'스프링 공부 > 게시판 프로젝트 만들기' 카테고리의 다른 글
[스프링] 27. MemberService.search의 기능을 조금 더 다양하게 만들어보기(페이징, like이용) (0) | 2023.02.09 |
---|---|
[스프링] 26. MemberService : 로그인 로직 만들기 (0) | 2023.02.08 |
[스프링] 24. Member 데이터 변경을 비즈니스 로직에 추가하기 (0) | 2023.02.07 |
[스프링] 23. MemberService의 registerNewMember를 만들어보자! (0) | 2023.02.06 |
[스프링] 22. MemberService의 테스트 : 회원가입 만들기 (0) | 2023.02.06 |