개발하면서 '이 코드, 제대로 작동할까?' 하고 의심스러울 때가 많죠. 특히 서블릿 같은 걸 다룰 때는 HTTP 요청이 왔다 갔다 하니까 테스트가 더 골치 아플 수도 있어요. 하지만 걱정 마세요! 오늘은 JUnit 4와 Mockito를 활용해서 쿠폰 서블릿을 깔끔하게 테스트하는 방법을 쉽게 알려드릴게요.
이 가이드를 따라가면:
- Gradle에 필요한 라이브러리를 설정하는 법
- HTTP 요청과 응답을 가짜(Mock) 객체로 만드는 방법
- Mockito를 활용해서 단위 테스트를 효율적으로 작성하는 법
- doGet과 doPost 메서드를 간편하게 테스트하는 팁
을 배울 수 있어요! 자, 그럼 가볍게 시작해볼까요? 😃
Step 1: Gradle에서 필요한 라이브러리 추가하기
테스트를 작성하려면 먼저 필요한 라이브러리를 프로젝트에 추가해야겠죠?
- build.gradle 파일을 열어 주세요.
- dependencies 섹션에 아래 코드를 추가하세요.
- 파일을 저장한 후, gradle build를 실행하면 준비 완료! 🎉
// JUnit 4 추가
dependencies {
testImplementation 'junit:junit:4.x.x' // 최신 버전으로 업데이트하세요!
// Mockito 추가
testImplementation 'org.mockito:mockito-core:x.x.x' // 최신 버전으로 변경하세요.
}
Step 2: 테스트용 클래스 만들기
이제 본격적으로 테스트를 작성할 파일을 만들어 봅시다!
- src/test/java 디렉터리에서 새로운 Java 클래스를 생성하세요.
- 클래스 이름은 CouponServletTest.java로 정하세요.
- 패키지 구조는 소스 코드와 일치해야 합니다. (com.bharath.gradle)
이제 본격적으로 코드 작성 준비 완료! 💪
Step 3: HTTP 요청과 응답을 가짜로 만들어보자!
서블릿을 테스트하려면 HTTP 요청과 응답을 다뤄야 하는데, 실제 서버를 띄우지 않고 테스트할 수 있도록 Mockito를 사용해서 가짜 객체(Mock)를 만들어야 해요.
import static org.mockito.Mockito.*;
import static org.junit.Assert.*;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.StringWriter;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
public class CouponServletTest {
@Mock
private HttpServletRequest request;
@Mock
private HttpServletResponse response;
@Mock
private RequestDispatcher dispatcher;
private CouponServlet servlet;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
servlet = new CouponServlet();
}
이렇게 하면 request, response, dispatcher가 Mockito를 통해 자동으로 가짜 객체(Mock)로 생성돼요. 편리하죠? 😄
Step 4: doGet 메서드 테스트하기
이제 doGet 메서드를 테스트해볼까요? 쿠폰 코드를 받아 응답하는 기능이 있다고 가정해 봅시다.
@Test
public void testDoGet() throws ServletException, IOException {
StringWriter stringWriter = new StringWriter();
PrintWriter writer = new PrintWriter(stringWriter);
when(response.getWriter()).thenReturn(writer);
when(request.getParameter("couponCode")).thenReturn("DISCOUNT50");
servlet.doGet(request, response);
writer.flush();
assertTrue(stringWriter.toString().contains("DISCOUNT50"));
}
여기서 핵심은 response.getWriter()를 가짜로 만들어서 결과를 체크하는 거예요. 만약 응답 내용에 DISCOUNT50이 포함돼 있다면, 테스트 성공! 🎯
Step 5: doPost 메서드 테스트하기
다음은 doPost 메서드 테스트입니다. RequestDispatcher를 이용해서 페이지 이동이 정상적으로 되는지 확인할 거예요.
@Test
public void testDoPost() throws ServletException, IOException {
when(request.getRequestDispatcher("result.jsp")).thenReturn(dispatcher);
servlet.doPost(request, response);
verify(dispatcher).forward(request, response);
}
}
여기서 verify(dispatcher).forward(request, response); 부분이 중요해요. 이 코드가 실행됐다는 것은 result.jsp로 정상적으로 이동했다는 것을 의미하죠! 😊
마무리하며!
오늘 배운 내용을 다시 정리해볼까요? ✅ Gradle에서 JUnit & Mockito 설정하는 법 ✅ HTTP 요청과 응답을 가짜(Mock) 객체로 만드는 방법 ✅ doGet과 doPost 메서드를 단위 테스트하는 방법
이제 서블릿을 테스트하는 게 어렵지 않게 느껴지시죠? 😉 앞으로는 자신 있게 테스트 코드를 작성해보세요! 🔥
다음엔 서블릿의 통합 테스트(Integration Testing) 방법도 다룰 예정이니까 기대해 주세요! 🚀
'SW > Gradle' 카테고리의 다른 글
Gradle: JUnit 설정하고 Java 서블릿 doGet 테스트하는 법 (0) | 2025.02.25 |
---|---|
Gradle: JUnit과 Mockito 설정하는 방법, 예제 (0) | 2025.02.23 |
Gradle: Java 웹 애플리케이션 테스트, JUnit, Mockito, JaCoCo, SonarQube, Jenkins 활용법, 방법, 예제 (0) | 2025.02.22 |
Gradle: Dependency Analysis, 쉽게 이해하기: Subproject와 Transitive Dependency 방법, 예제 (0) | 2025.02.21 |
Gradle: 대규모 Project Build와 Dependency 관리 방법, 예제 (0) | 2025.02.20 |