코딩하는 털보

21.11.04 TIL 본문

Diary/Today I Learned

21.11.04 TIL

이정인 2021. 11. 6. 03:32

오늘의 삽질

Junit RestTemplate 테스트

매번 RestTemplate를 new RestTemplate로 생성해서 사용하면 테스트할때 막막했다.
그래서 먼저 카카오, 구글, 네이버에 요청하는 RestTemplate을 RestTemplateBuilder 빈에서 생성하도록 변경했다.

    private final RestTemplate restTemplate;

    @Autowired
    public KakaoSocialLoginUtil(RestTemplateBuilder restTemplateBuilder) {
        this.restTemplate = restTemplateBuilder.build();
    }

이 방법도 있고 아니면 RestTemplate 자체를 빈으로 등록하는 방법도 있는데
RestTemplate을 사용하는 유틸 자체가 빈이니까 차이 없지 않을까 해서 이렇게 했다.

@RestClientTest

RestTemplateBuilder로 구축된 서비스 테스트는 @RestClientTest 어노테이션을 사용했다.
참고 : https://www.baeldung.com/restclienttest-in-spring-boot

@ExtendWith(MockitoExtension.class)
@RestClientTest(GoogleSocialLoginUtil.class)
class GoogleSocialLoginUtilTest {

MockRestServiceServer를 테스트에 주입하면 서버의 예상 응답을 코딩할 수 있다.

        @Autowired
    private MockRestServiceServer server;
    @Autowired
    private ObjectMapper objectMapper;
    @Autowired
    private GoogleSocialLoginUtil googleSocialLoginUtil;

    String authCode;
    Map<String, Object> attributes;

    @BeforeEach
    public void setUp() throws Exception {
        authCode = "abcdefg1234567";
        attributes = new HashMap<>();
        attributes.put("sub", "123456789");
        attributes.put("name", "tester");
        attributes.put("email", "tester.test.com");
        String detailsString =
                objectMapper.writeValueAsString(attributes);

        this.server.expect(requestTo(GoogleSocialLoginUtil.GOOGLE_TOKEN_INFO_URL
                        +"?id_token="+authCode))
                .andRespond(withSuccess(detailsString, MediaType.APPLICATION_JSON));
    }

    @Test
    void getUserInfoByCode() {
        //given

        //when
        Oauth2UserInfo userInfo = googleSocialLoginUtil.getUserInfoByCode(authCode);

        //then
        assertThat(userInfo.getId()).isEqualTo(attributes.get("sub")+"G");
        assertThat(userInfo.getName()).isEqualTo(attributes.get("name"));
        assertThat(userInfo.getEmail()).isEqualTo(attributes.get("email"));
    }
}
Comments