221010 구현체로 테스트하기

샨티(shanti)·2022년 10월 10일
0

TIL

목록 보기
128/145

하루를 마무리 하기 전, 오늘 있었던 일들을 잔잔히 되짚어봅니다.
성공과 실패의 모든 요소에서 '배울 점'을 찾아내어 기록하고,
더 성장하는 내일의 나를 위해 'action plan'을 세웁니다.

아무래도 테스트를 계속 미뤄두는 것이 찜찜한지라 우선 엄두가 나지 않는 프론트는 잠시 묻어두고(ㅎㅎ) 백엔드쪽 테스트를 보강하기로 결정했다.

페이징을 하게 되면서 몇몇 repository에서 받아오는 데이터를 리턴해줄 때 자료 타입이 List에서 Page로 바뀌게 되었는데 그 때문에 컴파일 자체가 되지 않는 상태였다.

우선 어제 TDD 스터디에서 배웠던 대로 떄로는 인텔리제이의 도움을 받자! 하는 마인드를 되새겼다. 그리고 빨간불이 뜨는 곳을 찾아가 인텔리제이가 시키는 대로 따랐다.

가장 먼저는 model에서 추가해줬던 인자가 하나 있었는데, 그게 없으니 추가하라는 알림이었다.
수긍이 갔기 때문에 고개를 끄덕이면서 String type의 image source를 임의로 추가했다.

그리고 또다시 run test.
이번엔 정말 난해한..ㅎㅎ 반드시 해결해야 했던 리턴 자료형의 타입이 맞지 않다는 알림이었다.
Page를 반환해줘야 하는데 여전히 List 자료를 반환하고 있는 이 테스트...
마음같아서는 블록으로 지정한 뒤에 살포시 delete를 하고 싶었지만 그래도 테스트를 자꾸 연습해봐야 한다!! 하는 마음으로 찬찬히 살펴보았다.

평소에 하던 대로 new Page() 객체를 새로 생성해 반환해줄까? 하고 여러 방법으로 적어봤는데 생각보다 쉽게 풀리지 않았다.
하나의 페이지를 리턴한다... 그리고 그 페이지가 내가 원하는 모습인지를 테스트한다... 딱히 좋은 방법이 떠오르지 않았다.

그 때 지난번에 동료와 잠시 얘기하다가 PageImpl 클래스에 대해 얘기한 것이 떠올랐다.
결론적으론 PageImpl<>을 사용하여 테스트를 일부 해결했다.

여기서도 동료의 도움과 함께 인텔리제이의 가이드를 따랐다.
PageImpl<>을 타이핑하니 이어지는 괄호안에 어떤 것들이 들어가야 하는지 친절하게 알려줬다.

사실 PageImpl에 대해 거의 몰랐음에도 불구하고 이 명세를 자세히 들여다보면서 하나 하나 진행해보았다.
말 그대로 첫번째 인자는 List 타입의 컨텐트. 내가 페이지에서 보이고자 하는 content를 List type으로 만들어 주면 된다.
Pageable은 이미 있는 내용을 가져오면 되고...
total이 조금 헷갈렸는데 결국 items의 전체 수량이기 때문에 위에서 선언한 List type의 컨텐트의 size를 주면 되는 것이었다.

오늘 PageImpl을 새롭게 안 것 보다도 더 의미있는 점은 내가 '구현체'에 대해서 너무 파편화된 지식만 갖고있었다는 점을 깨달았다는 것이다.

'구현체'라는 것이 좀 모호하게 느껴졌는데...
결국 내가 무지성으로 사용하고 있던 List.of() 역시 List의 구현체이고,
또 그렇-게나 해결되지 않았던 LocalDateTime 인자 역시 테스트에서 결국 '구현체'로 임의 삽입함으로서 해결할 수 있었다. (그 전에는 any()를 넣었다가 빵빵- 터졌던 테스트..ㅎㅎ)

다양한 클래스를 알아가는 것도 중요하지만 그 클래스의 구현체를 알아가는 것 역시 중요하다는 점을 새삼 깨달았다.
특히나 테스트를 진행해야 하는 경우라면 더더욱...
잊지말자 테스트, 잊지 말자 구현체.

갠적으론 Hash- 로 시작되는 클래스들의 구현체를 전혀 모르는 상태인데, 이부분은 따로 정리하고 공부하도록 해야겠다.

오늘도 큰 도움을 준 동료에게 감사의 마음을...ㅎㅎ!

profile
가벼운 사진, 그렇지 못한 글

0개의 댓글