본문 바로가기
T.I.L. :: Today I Learned/항해99 14기 본과정

Day 85. 테스트코드가.. 눈에 보여..!👀

by DaSsom 2023. 6. 26.

오늘은 우선 Controller단의 테스트코드에 도전해보았다.

 

Membes Controller 테스트코드

public class MembersPostControllerTest {

    @Mock
    private MembersPostService membersPostService;

    @Mock
    private SignupRequestDto signupRequestDto;

    @Mock
    private LoginRequestDto loginRequestDto;

    @Mock
    private GithubIdRequestDto githubIdRequestDto;

    @Mock
    private UserDetailsImpl userDetails;

    @Mock
    private HttpServletRequest httpServletRequest;

    @Mock
    private HttpServletResponse httpServletResponse;

    private MembersPostController membersPostController;

    Members member = Members.builder()
            .email("test@example.com")
            .nickname("nickname")
            .password("password1!")
            .role(Role.USER)
            .codingTem(36.5)
            .mogakkoTotalTime(0L)
            .memberStatusCode(MemberStatusCode.BASIC)
            .profileImage("https://source.boringavatars.com/beam/120/$" + "nickname" + "?colors=00F0FF,172435,394254,EAEBED,F9F9FA")
            .friendCode(123456)
            .isTutorialCheck(false)
            .build();

    @BeforeEach
    public void setup() {
        MockitoAnnotations.openMocks(this);
        membersPostController = new MembersPostController(membersPostService);
    }

먼저 전역으로 필요한 member 변수를 하나 선언해주었고 @BeforeEach 어노테이션을 사용해 Mock객체들을 초기화해준다. 그리고 Members Controller 의 인스턴스를 생성해주었다. 여기에서는 @ExtendWith(MockitoExtension.class) 를 써주지 않아야 하는것인지.. 이 어노테이션을 붙여주면 테스트코드가 작동하지 않아서 일단 빼주었다.

그리고 이 어노테이션의 역할이 무엇인지 Gpt에게 물어봤다..!!

라고 한다! 

 

그리고 보통 Controller 테스트코드는 WebMvcTest 어노테이션을 달고 시작하던데, 아직 여기까지는 이해가 안되고..

controller 테스트코드

 

Controller 테스트 코드 작성하기

전에 만든 개인 프로젝트에서는 controller 테스트 코드를 작성하지 않았다. 대신 PostMan으로 하나하나 테스트를 했었다. 보다 안정적인 애플리케이션을 위해 이번 협업 프로젝트에서는 Controller 테

velog.io

 

@DisplayName("[POST] 회원가입 테스트")
    @Test
    public void testSignup() {
        Message message = new Message("회원가입 성공", null);
        when(membersPostService.signup(any(SignupRequestDto.class))).thenReturn(ResponseEntity.ok(message));

        ResponseEntity<Message> response = membersPostController.signup(signupRequestDto);

        assertEquals(HttpStatus.OK, response.getStatusCode());
        assertEquals(message, response.getBody());
    }

결국은 이렇게 작성해보았다.

when()에는 내가 원하는 상황, thenReturn()으로 원하는 반환값을 설정해줌. 그리고 필요한 메서드를 호출하여 그 두가지 값을 Assertions 를 사용해 검증하면 됨!!

 

맞는.. 거겠..지?

 

 

맞.. 겠지..? ㅎㅎ