SW/Gradle

Gradle: 기반 유닛 테스트: doPost 메서드 테스트하는 방법

얇은생각 2025. 2. 26. 07:30
반응형

 

Unit Test와 Mocking, 왜 필요할까?

개발하다 보면 내 Code가 제대로 작동하는지 확신이 안 설 때가 있죠? 그럴 때 꼭 필요한 게 바로 Unit Test예요. 그리고 그중에서도 Mocking(Mock)은 의존하는 요소를 가짜로 만들어 Test를 좀 더 쉽게 해주는 기법이죠. 오늘은 Mockito와 JUnit을 활용해서 doPost Method를 Test하는 방법을 쉽게 풀어볼게요.

 


 

Gradle: 기반 유닛 테스트: doPost 메서드 테스트하는 방법

 

doPost Method, 이게 뭔데?

웹 개발에서는 doPost가 사용자가 폼 같은 걸 제출하면 데이터를 받아 처리하는 역할을 해요. 예를 들면, 쿠폰 Code를 입력하면 서버가 그 값을 받아서 적절한 Response을 주는 거죠. 근데 이걸 Test하려면 Request(Request)과 Response(Response)이 어떻게 동작하는지를 확인해야 해요.

오늘은 doPost가 쿠폰을 잘 받아서 올바르게 처리하는지 Test해볼 거예요. 이를 위해 request.getParameter와 request.getRequestDispatcher를 Mocking해서 Test 환경을 만들어볼게요!

 


 

Test 환경부터 세팅하기

본격적으로 Code 작성 전에 필요한 것들을 준비해봅시다!

  • JUnit: Test Code를 작성하는 데 가장 많이 쓰이는 Framework
  • Mockito: Mock Object(Mock Object)를 만들어주는 라이브러리
  • Gradle: Build하고 Test 실행하는 데 유용한 도구

 

우선 build.gradle에 필요한 라이브러리를 추가해 주세요:

dependencies {
    testImplementation 'junit:junit:4.13.2'
    testImplementation 'org.mockito:mockito-core:4.2.0'
}

 

이제 준비 끝! 본격적으로 Test Code 짜러 가봅시다!

 


 

doPost Test Code 작성해보기

Test하려면 몇 가지 단계를 거쳐야 해요:

  1. Request(Request)과 Response(Response) 객체를 가짜로 만들기 (Mocking)
  2. getParameter Method가 특정 값을 반환하도록 설정
  3. getRequestDispatcher가 원하는 JSP 페이지로 이동하도록 설정
  4. setAttribute가 올바르게 동작하는지 검증
  5. forward Method가 정상적으로 호출되는지 체크

 

1단계: Test 클래스 만들기

import static org.mockito.Mockito.*;
import static org.junit.Assert.*;

import org.junit.Test;
import javax.servlet.RequestDispatcher;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class CouponServletTest {

    @Test
    public void testDoPost() throws Exception {
        // 준비
        HttpServletRequest request = mock(HttpServletRequest.class);
        HttpServletResponse response = mock(HttpServletResponse.class);
        RequestDispatcher dispatcher = mock(RequestDispatcher.class);

        when(request.getParameter("coupon")).thenReturn("SuperSale");
        when(request.getRequestDispatcher("response.jsp")).thenReturn(dispatcher);

        CouponServlet servlet = new CouponServlet();

        // 실행
        servlet.doPost(request, response);

        // 검증
        verify(request).setAttribute("discount", "SuperSale");
        verify(dispatcher).forward(request, response);
    }
}

 

2단계: Mocking과 스텁이 필요한 이유

Mocking(Mock)은 실제 객체를 흉내 내서, 특정한 입력값을 줬을 때 원하는 동작을 수행하도록 설정하는 거예요. 여기서 우리가 설정한 것들을 보면:

  • HttpServletRequest와 HttpServletResponse를 Mocking해서 실제 Network Request 없이 Test 가능하도록 했어요.
  • getParameter("coupon")이 "SuperSale"을 반환하도록 설정해서 특정한 입력값을 강제했어요.
  • getRequestDispatcher("response.jsp")를 Mocking해서, 가짜로 Response을 보내도록 만들었어요.

 

3단계: Test 실행 후 검증하기

Test가 정상적으로 동작했는지 확인하려면:

  • setAttribute("discount", "SuperSale")이 호출되었는지 체크
  • forward(request, response)가 Request을 올바르게 전달했는지 확인

 

이 두 가지를 검증하면 Test가 제대로 작동하는지 확인할 수 있어요!

 


 

Test 실행하고 결과 보기

Test를 실행하려면 터미널에서 다음 명령어를 입력하세요:

gradle test

 

성공하면 다음과 같은 메시지가 나올 거예요:

BUILD SUCCESSFUL

 

하지만 만약 Test가 실패하면? Gradle이 친절하게 오류 메시지를 보여줄 거예요. 예를 들어, 예상값과 실제값이 다르면 이런 식으로 나오겠죠.

기대값: SuperSale
실제값: FlashSale

 

이제 이 값을 다시 확인하고 수정하면 됩니다!

 


 

Unit Test를 더 잘하는 팁!

  1. 엣지 케이스를 놓치지 마세요! 쿠폰 Code가 없거나 엉뚱한 값이 들어왔을 때 어떻게 동작하는지도 체크하는 게 중요해요.
  2. Test는 가볍고 빠르게! 불필요한 Dependency을 줄이면 Test 시간이 짧아지고 효율성이 높아져요.
  3. 단위 Test뿐만 아니라 통합 Test도 고려하세요. 전체적인 흐름을 검증하는 것도 중요하죠.
  4. Automation Test를 적극 활용하세요! CI/CD Pipeline에 포함시키면 Code 품질을 지속적으로 유지할 수 있어요.

 


 

마무리하면서…

자, 이제 doPost Method를 Test하는 게 한결 쉬워졌죠? 오늘 정리해보면:

  • Mockito와 JUnit을 이용해 쉽게 Unit Test를 작성하는 법을 배웠고,
  • Mocking을 활용해 Dependency을 최소화하는 방법을 익혔으며,
  • Test 결과를 확인하고 Debugging하는 노하우까지 얻었어요.

 

이제 실제 프로젝트에서도 부담 없이 Test를 적용해 보세요! 처음에는 어렵게 느껴질 수도 있지만, 익숙해지면 개발이 훨씬 편해질 거예요. Code 품질을 높이는 가장 좋은 방법은 꾸준한 Test 습관이니까요! 😊

반응형