[우아한테크코스] 5월 9일 TIL

less than 1 minute read

[test] Mock을 사용하는 이유

Controller와 같이 주입된 빈이 많은 경우에 순수하게 controller만 테스트하고 싶을 때 사용

  • 만드는 방법
    Mockito.mock(MemberService.class)
    @Mock 멤버 변수 상단 어노테이션 + @ExtendWith(MockitoExtension.class) 클래스 상단 어노테이션, 혹은 StudyService(@Mock MemberService) 와 같이 매개변수에 선언 가능
  • mock 객체의 동작
    return 값이 있으면 null 리턴
    Optional이면 Optional.empty 리턴
    컬렉션은 비어있고, 원시타입은 기본값
    void는 예외 안던짐

[Spring] dto의 범위

이번 논점은 dto->domain의 변환이 어디서 이루어져야 옳은가? 였다.
dto의 시초는 request, response를 한번에 처리하기 위함이라고 생각했다.
controller의 역할은 client의 요청을 최상단에서 주고받기 위함이고 여기서 responseDto, requestDto가 필요해졌다.
service는 핵심 비즈니스로직을 수행하므로 client의 요청이 바뀌었다고 해서 수정이 필요한 영역이 아니라고 생각했다. 하지만 requestDto가 service 단까지 넘어오게 되면 service에도 변화가 영향을 미치게 된다.
따라서 controller에서 도메인으로의 변환이 이루어지는 것이 맞다고 생각했다.
물론 이에 따라서 controller가 도메인까지 알아? 라는 문제가 발생할 수 있다.
이와 관련해서는 팩토리 메서드를 사용해서 request 자체를 넘겨주도록 하였다. 이에 따라서 어쩌면 도메인은 숨겨졌지만 request의 변화에 따른 service의 변화가 불가피해진 것은 아닐까? 하는 의문이 든다.

제출 전

데이브 제이 피드백 반영 생성자에 this 중복 검사의 위치 customException의 위치 패키지의 구조 findAll containsExactly와 같은 api 사용(대충 검사x) 테스트 중복 제거