스프링 공부/게시판 프로젝트 만들기

[스프링] 30. MemberRepositoryTest_Search_Contains에서 검색조건이 서로 다른 객체를 향하는 거라면 잘될까

장아장 2023. 2. 10. 16:52

제목에서 보는 그대로의 목표를 위해 테스트코드로 검증을 해보려고 한다. 

일단, and를 이용했을 경우, 검색하는 값이 testUser1을 목표로 하는 파라미터와, testUser2를 목표로 하는 파라미터라면, 

검색시에 아무것도 나오지 않는다. 

 

하지만, or과 contains를 입력하면 

SearchMemberDto에

username = "11", nickname = null, email = "22"로 검색하면 

11, 22번의 두 멤버가 나와야 한다. 

이게 잘 이루어지는지 확인해보고 싶었다. 

@Test
@DisplayName("")
public void 서로_다른_객체를_요구하며_검색하기() throws Exception{
    //given
    SearchMemberDto searchMemberDto = new SearchMemberDto("11", null, "22");
    PageRequest pageRequest = PageRequest.of(0, 10);
    //when
    Page<SearchMemberDto> result = memberRepository.search(searchMemberDto, pageRequest, CONTAINS);
    //then
    assertThat(result.getTotalElements()).isEqualTo(2L);
}

이렇게 코드를 만들었다. 

일단, Page<>의 getTotalElements는 long 타입으로 반환되기 때문에, Assertions에 비교하기 위해서 Long 타입의 값을 넣었다. 

이렇게 했을 때 테스트를 돌려보았다. 

정확하게 두 멤버가 나왔으며, 이번엔 정확한 객체가 있는지 비교하기 위해

assertThat(result.getContent().stream().map(SearchMemberDto::getNickname))
        .containsExactly("test11", "test22");

이런 assertion을 추가로 넣었다. 

이 때에도 정상적으로 테스트가 통과되었다. 

그렇다면 1, 2가 들어가면 어떤 결과가 나와야 할까?

1 들어간 놈들 : 1, 10~19, 21, 31, 41, 51, 61, 71, 81, 91, 100 ( 20)

2 들어간 놈들 : 2, 12, 20~29, 32, 42, 52, 62, 72, 82, 92 ( 19)

겹치는 놈들 : 12, 21 (2)

1들어간 놈들 + 2들어간 놈들 - 겹치는 놈들 = 37

이 나와야 한다. 

이게 과연 나올까?

 

@Test
@DisplayName("")
public void 서로_값을_넣었을때_포함값을_가지며_다른_입력에_대한_쿼리가_or로_처리되는지() throws Exception{
    //given
    SearchMemberDto searchMemberDto = new SearchMemberDto("1", null, "2");
    PageRequest pageRequest = PageRequest.of(0, 10);
    //when
    Page<SearchMemberDto> result = memberRepository.search(searchMemberDto, pageRequest, CONTAINS);
    //then
    assertThat(result.getTotalElements()).isEqualTo(37L);
}

이렇게 코드가 있을 때,

정상적으로 결과가 반환된다. 

결국, 원하는 바와 같이 값이 반환되었다. 

 

결국, 최종적으로 원하던 검색에 대한 검증까지 마쳤다. 

컨트롤러에 대해서는 조금 더 고민하고, 신중하게 만들어보아야 겠다. 

(라고 하기에는, 기능들을 어떻게 써먹을지를 조금 더 고민하면 될 것 같다. )