테스트 코드가 중요한 것을 알고 부랴부랴 공부하면서 진행하고 있다.
오늘은 테스트코드와 프론트쪽 요구사항을 듣고 설계를 바꾸는 데 시간을 많이 썻던 것 같다.
물론 두 가지 다 리더분이 잘해주셔서 도움도 받고 캐리? 받고있는 상황인 거 같다.
테스트 코드를 하면서 배웠던 걸 간단하게 정리해보려고 한다.
1.
registerTodo에서 터지는 Illegal 에러의 내용을 exception에 담는 코드이다.
그 후 assertEquals 로 첫번째 파라미터 값과 비교를 해서 맞으면 pass~
2.
주석을 보면 4번과 매칭이 되어있는 3번이 로그인을 한 다음, 2번과 매칭이 되어있는 1번이 쓴 글을 인증하려고 하는 상황의 코드이다.
물론 예외처리를 해서 잘못된 접근인 것을 테스트 하려고 한다.
신기했던 부분은 이 부분이다.
given(matchingRepository.getMatching(member3.getId())).willReturn(Optional.of(matching2));
TodoService에 confirmTodo() 에는 GetMathing() 이라는 함수가 있다.
그 함수의 역할은 자기 자신과 매칭된 친구를 찾는 것인데, 매칭 상대가 없으면 빠꾸시키는 친구이다.
무튼 3번과 4번이 매칭을 한 상태이고 그 정보가 matching2에 들어있다.
자 그럼 getMatching을 하게되면 matching2가 반환이 되야하는데 그걸 해주는 친구가 given이다.
아무리 repository와 service에@Mock
과@InjectMocks
를 붙여도 안됐었는데 given을 해주니 되었다.
짱짱짱ㅇ맨!
어라 근데 저 두 개의 어노테이션의 역할이 궁금해졌다. 이거만 간단하게 정리하고 자야지..
@Mock
은 로직이 삭제된 빈 껍데기라고 한다.
실제로 메서드는 갖고 있지만 내부 구현이 없는 상태이다.
@InjectMocks
는 @Mock
어노테이션이 붙은 객체들을 주입시켜주는 친구이다.
쓰고보니 너무 간단한 거 같은데... 흠..
끝!