Home Junit Mocking 하기
Post
Cancel

Junit Mocking 하기


카카오로 부터 사용자의 정보를 가져온 다음의 로그인 로직을 검증하려고 하는데 매 테스트 마다 카카오에게 사용자 정보를 요청하는 과정은 불필요하다고 생각했습니다. 그래서 고민하던중 mocking이라는 기법을 알게 되었다.

Mocking 이란

Mocking은 소프트웨어 테스트에서 의존성 객체를 대체하여 실제 구현 대신 모조 객체(mock object)를 사용하여 테스트를 수행하는 기법입니다. Mocking을 통해 테스트의 고립성을 확보하고, 특정 객체의 동작을 시뮬레이션하거나 제어할 수 있다.

카카오 사용자 정보 요청 부분을 Mocking하여 원하는 값을 응답하도록

kakaoApiFeignCall를 아래처럼 Mocking하여 원하는 값을 응답하도록 설정하면 oauthLogin메소드가 실행이 되고 내부에서 kakaoApiFeignCall를 호출하면 실제 로직이 처리되는 것이 아니라 Mocking한 가상 객체가 응답하게 되어 테스트시 불필요한 로직을 줄일 수 있다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
  @DisplayName("카카오 로그인을 할 시 저장된 사용자가 없으면 회원가입한다.")
  @Test
  @Transactional
  void oauthKakaoJoinTest() throws JsonProcessingException {
    // given
    //kakaoApiFeignCall 부분을 Mocking한다.
    given(kakaoApiFeignCall.getUserInfo(any(String.class)))
      .willReturn(
        KakaoUserInfoResponse.builder()
          .kakaoAccount(KakaoUserInfoResponse.KakaoAccount.builder()
            .email("test@test.com")
            .build())
          .build()
      );

    OAuthLoginServiceRequest oAuthLoginServiceRequest = OAuthLoginServiceRequest.builder()
      .token("sadhAewofneonfoweifkpowekfkajfbdsnflksndfdsmfkl")
      .deviceId("testDeviceId")
      .pushKey("testPushKey")
      .snsType(SnsType.KAKAO)
      .build();

    OAuthLoginResponse oAuthLoginResponse = loginService.oauthLogin(oAuthLoginServiceRequest);

    assertAll(
      () -> assertThat(oAuthLoginResponse.getAccessToken()).isNotNull(),
      () -> assertThat(oAuthLoginResponse.getRefreshToken()).isNotNull(),
      () -> assertThat(oAuthLoginResponse.getEmail()).isEqualTo("test@test.com")
    );
  }
This post is licensed under CC BY 4.0 by the author.