SW/Gradle

Gradle: JUnit 설정하고 Java 서블릿 doGet 테스트하는 법

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

자바 웹 개발을 하다 보면, 서블릿을 테스트해야 하는 순간이 옵니다. "이게 제대로 돌아가는 걸까?" 하고 궁금해질 때가 있죠. 그냥 실행해 보면 안 되냐고요? 물론 가능하긴 한데, 예상치 못한 문제가 터질 수도 있습니다. 그래서 안전하게 가려면 테스트를 꼭 해야 해요.

오늘은 doGet 메서드를 간단하고 효과적으로 테스트하는 방법을 알려드릴게요. 어렵지 않아요! JUnit과 Mockito를 활용해 쉽고 빠르게 테스트를 작성하는 법을 알아봅시다.

 

Gradle: JUnit 설정하고 Java 서블릿 doGet 테스트하는 법

 

서블릿 테스트, 왜 필요할까?

서블릿은 웹 애플리케이션의 핵심이죠. 그런데 제대로 동작하는지 확인하지 않고 넘어가면 큰일 날 수도 있어요. 작은 실수 하나가 치명적인 버그로 이어질 수도 있고, 수정하려면 골치 아픈 경우가 많거든요.

 

테스트하면 좋은 점

  • 응답 값이 예상대로 나오는지 확인 가능
  • 배포 전에 버그를 잡을 수 있음
  • 유지보수 및 리팩토링이 훨씬 쉬워짐
  • 코드의 신뢰성과 품질이 높아짐

 

이제 CouponServlet의 doGet 메서드를 직접 테스트해볼까요?

 

테스트 환경 세팅하기

테스트를 하기 전에 필요한 준비부터 해야겠죠? Gradle을 사용한다면 아래처럼 설정하면 됩니다.

 

 

필요한 라이브러리 추가 (Gradle 설정)

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

 

이제 본격적으로 테스트 코드를 작성해 봅시다!

 

 

doGet 메서드 테스트하기

1단계: 테스트 메서드 만들기

테스트 메서드의 이름은 testDoGet으로 정했습니다. 이 메서드를 실행하면, doGet이 올바르게 작동하는지 확인할 수 있어요.

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

import java.io.PrintWriter;
import java.io.StringWriter;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.junit.Before;
import org.junit.Test;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;

public class CouponServletTest {

    private CouponServlet servlet;
    
    @Mock
    private HttpServletRequest request;
    
    @Mock
    private HttpServletResponse response;
    
    private StringWriter stringWriter;
    private PrintWriter printWriter;
    
    @Before
    public void setUp() throws Exception {
        MockitoAnnotations.initMocks(this);
        servlet = new CouponServlet();
        
        // PrintWriter 모의(Mock) 객체 생성
        stringWriter = new StringWriter();
        printWriter = new PrintWriter(stringWriter);
        when(response.getWriter()).thenReturn(printWriter);
    }
    
    @Test
    public void testDoGet() throws Exception {
        servlet.doGet(request, response);
        printWriter.flush();
        assertEquals("Super Sale", stringWriter.toString().trim());
    }
}

 

 

2단계: 코드 설명

  1. Mockito 활용: @Mock 어노테이션을 사용하여 HttpServletRequest와 HttpServletResponse를 가짜(Mock) 객체로 생성합니다.
  2. @Before에서 초기화: setUp 메서드에서 필요한 객체를 초기 설정합니다.
  3. getWriter()를 모킹(Mocking) 처리: when(response.getWriter()).thenReturn(printWriter);를 통해 PrintWriter 객체를 설정합니다.
  4. 테스트 실행: doGet이 실행된 후, "Super Sale"이 반환되는지 확인합니다.

 

 

테스트 실행하기

테스트를 돌려볼까요? 아래 명령어를 실행하세요.

gradle clean test

 

테스트가 실행되면, 결과 리포트도 자동으로 생성됩니다.

 

 

테스트 결과 확인하기

테스트가 끝난 후, 결과를 아래 위치에서 볼 수 있어요.

  • 테스트 결과 파일: build/test-results/test/
  • HTML 보고서: build/reports/tests/test/index.html

 

웹 브라우저에서 index.html을 열어 상세한 결과를 확인해 보세요!

 

 

테스트 중 자주 발생하는 오류 & 해결 방법

1. response.getWriter() 호출 시 NullPointerException 발생

이 문제는 when(response.getWriter()).thenReturn(printWriter);가 제대로 설정되지 않았을 때 발생합니다. @Before 메서드에서 빠진 부분이 없는지 다시 확인해 보세요.

 

2. assertEquals에서 값이 일치하지 않는 오류

테스트가 실패하는 이유 중 하나는 응답 문자열 앞뒤에 공백이 포함된 경우입니다. .trim()을 추가해 확인해 보세요. 그리고 doGet에서 "Super Sale"을 제대로 반환하는지 다시 한 번 점검해야 합니다.

 

 

테스트를 확장해 보기

기본적인 doGet 테스트를 작성했지만, 조금 더 신뢰도를 높이려면 다양한 경우를 고려해야 합니다.

  • 잘못된 요청이 들어왔을 때 어떻게 처리되는지 테스트
  • 예외가 발생했을 때 정상적으로 작동하는지 확인
  • 다양한 요청 파라미터가 주어졌을 때 응답을 검증

 

이런 테스트를 추가하면 애플리케이션이 더욱 견고해질 거예요!

 

 

마무리하며

개발을 하다 보면 "그냥 실행해서 보면 되지 않을까?"라는 생각이 들 수도 있어요. 하지만 테스트를 미리 해두면, 예상치 못한 문제를 방지하고 유지보수도 한결 쉬워집니다. JUnit과 Mockito를 잘 활용하면 복잡해 보이는 테스트도 간단하게 만들 수 있어요.

오늘 설명한 방법을 따라 직접 해보면서 단위 테스트에 익숙해지는 시간을 가져보세요!

반응형