쌓고 쌓다

Mockito given willReturn이 동작하지 않을때 본문

프로그래밍/spring

Mockito given willReturn이 동작하지 않을때

승민아 2024. 1. 30. 16:25

 

Response Body에 값이 담겨 있지 않는 문제가 발생했다.

 

 

컨트롤러 코드는 다음과 같았다.

memberService에 addMember를 통해 반환된 MemberResponse를 body 응답으로 보낸다.

 

 

테스트 코드에 given을 사용하여 다음과 같이 signUpMember이 들어왔을때 memberResponse를 반환하도록 했다.

/*
        SignUpMember signUpMember = new SignUpMember();
        signUpMember.setName("새로운닉네임");
        signUpMember.setLoginId("새로운아이디");
        signUpMember.setLoginPwd("새로운비밀번호");

        MemberResponse memberResponse = new MemberResponse();
        memberResponse.setMemberId(1L);
        memberResponse.setName(signUpMember.getName());
        memberResponse.setRole(Role.USER);
*/


given(memberService.addMember(signUpMember)).willReturn(memberResponse);

 

테스트 코드를 돌려보면 응답으로 201 상태 코드는 반환했지만 body에는 아무것도 들어있지 않는다...

 

body에 담을 MemberResponse는 memberService.add를 통해 반환되는데 반환되지 않은 것이다.

 

 

 

그래서 verity를 사용하여 실제로 이 함수가 제대로 1회 동작했는지 검증 코드를 넣어봤다.

verify(memberService, times(1)).addMember(signUpMember);

 

 

인자로 넘긴 객체가 서로 다른 객체라서 문제가 되고 있다.

실제 컨트롤러에 넘어온 SignUpMember와 서비스 addMember 실행하는 SignUpMember가 달라서 발생하는 문제이다.

 

 

컨트롤러로 보낸 JSON을 SignUpMember로 변환하여 컨트롤러단에서 처리하기에

내가 given willReturn시 등록한 객체와 달라 동작하지 않는것이였다.

 

해결 방법

  • 객체 비교의 equals() 메서드 오버라이딩
  • SignUpMember 클래스에 @Data 붙이기 (@Data에 @EqualsAndHashCode가 존재하기 때문)
    • @EqualsAndHashCode : equals(동등성) 함수와, hashcode(동일성) 함수를 오버라이딩해줌.

Comments