AI

ChatGPT로 테스트 코드 자동 생성하기, 실무에 이렇게 활용했습니다

curiousKidd 2025. 7. 24. 19:12
반응형

최근 개발자 커뮤니티를 보면 "테스트 코드 어떻게 작성해야 할까요?"라는 질문이 정말 자주 보입니다. 사실 저도 초창기에는 테스트 코드 작성이 너무 어렵게 느껴졌고, 귀찮기도 했습니다. 그런데 요즘은 ChatGPT 덕분에 테스트 코드 작성이 꽤 편해졌어요. 실무에서 직접 사용해본 경험을 바탕으로, ChatGPT로 테스트 코드를 자동 생성하는 방법과 팁들을 공유해보려고 합니다.


문제 상황: 테스트 코드를 쓰기 귀찮거나, 시간이 없다

우리 모두 알죠. 테스트 코드는 중요하다는 걸. 그런데 바쁜 일정에 치이다 보면 테스트 코드는 늘 후순위로 밀립니다. 특히 기존 레거시 코드에 테스트를 붙이려고 할 때는 어디서부터 손을 대야 할지도 모르겠고, 의욕이 뚝 떨어지죠.

그리고 또 하나. JUnit, Mockito, WebMvcTest 같은 것들을 문법까지 외우면서 쓰는 게 은근 스트레스입니다. 테스트 코드가 개발자의 실력을 증명하는 것처럼 여겨질 때도 있고요.

그래서 저도 한동안은 테스트 코드를 최소한으로만 작성했는데, 어느 순간 큰 장애를 겪으면서 생각이 완전히 바뀌었습니다. 그때부터 테스트 코드 작성을 생활화했는데요, ChatGPT를 활용하면서 훨씬 수월해졌습니다.


내가 시도한 방법: ChatGPT에게 테스트 코드를 직접 부탁해보기

처음엔 반신반의했어요. "AI가 테스트 코드를 어떻게 알아서 짜주겠어?" 그런데 생각보다 꽤 잘 해냅니다. 특히 다음과 같은 상황에서 유용하게 썼어요:

  • 특정 비즈니스 로직에 대한 단위 테스트 작성
  • Mocking이 필요한 Service 테스트 구성
  • Controller 계층 테스트에서 WebMvcTest 사용
  • 예외 케이스 테스트 추가

예를 들어, 아래와 같은 코드가 있다고 가정해볼게요.

@Service
public class ReservationService {
    public Reservation create(String name, int peopleCount) {
        if (peopleCount <= 0) {
            throw new IllegalArgumentException("인원 수는 1명 이상이어야 합니다");
        }
        return new Reservation(name, peopleCount);
    }
}

이 코드를 ChatGPT에 이렇게 입력했어요:

"위 ReservationService 클래스에 대한 JUnit5 기반 단위 테스트 코드를 만들어줘. 정상 케이스와 예외 케이스를 모두 포함해서."

그랬더니 아래와 같은 테스트 코드를 생성해줬습니다.

@DisplayName("ReservationService 테스트")
class ReservationServiceTest {

    private ReservationService reservationService;

    @BeforeEach
    void setUp() {
        reservationService = new ReservationService();
    }

    @Test
    @DisplayName("정상적인 예약 생성")
    void createReservationSuccess() {
        Reservation reservation = reservationService.create("John", 2);

        assertNotNull(reservation);
        assertEquals("John", reservation.getName());
        assertEquals(2, reservation.getPeopleCount());
    }

    @Test
    @DisplayName("인원 수가 0명 이하일 경우 예외 발생")
    void createReservationInvalidPeopleCount() {
        assertThrows(IllegalArgumentException.class, () ->
            reservationService.create("Jane", 0));
    }
}

처음 결과물이 100% 완벽하지는 않지만, 뼈대를 굉장히 잘 잡아줘요. 수정이나 추가 작업만 조금 하면 바로 실무에 쓸 수 있는 수준입니다.


해결 과정 및 팁: 이렇게 써보세요

제가 ChatGPT로 테스트 코드를 만들면서 터득한 몇 가지 팁을 공유드릴게요.

1. "이 클래스에 대한 테스트 코드를 작성해줘"보다 구체적으로 요청하기

  • 단순하게 "테스트 코드 짜줘"라고 하면 예상보다 부정확한 결과가 나올 수 있어요.
  • "JUnit5 기준으로", "Mockito로 Mock 처리 포함해서", "예외 케이스도 포함해줘"처럼 구체적으로 조건을 알려주세요.

2. 테스트 대상 클래스와 메서드를 함께 붙여넣기

  • 코드 없이 설명만 하면 엉뚱한 테스트가 나올 수 있어요.
  • 클래스와 메서드 전체 코드를 붙여넣는 게 정확도 높이는 데 가장 효과적입니다.

3. 한글로 요청해도 OK, 그래도 가끔 영어로 해보세요

  • ChatGPT는 한글로도 충분히 잘 작동합니다.
  • 하지만 좀 더 세밀한 테스트 구성이 필요할 때는 영어로 "Generate unit test code for this Java class using JUnit5 and Mockito"라고 하면 결과가 더 정교한 경우도 있어요.

4. Controller 테스트에서는 @WebMvcTest를 함께 언급하기

  • Spring Boot Controller를 테스트할 땐 단순히 테스트 코드 요청하면 @SpringBootTest를 사용한 전체 통합 테스트가 나올 수 있어요.
  • "@WebMvcTest를 사용해서 Controller만 단위 테스트 해줘"라고 요청하면 훨씬 정확한 결과를 받을 수 있습니다.

5. 결과는 반드시 검토하고 실행해보기

  • 아무리 ChatGPT가 잘 만들어줘도, 사람이 검토는 꼭 해야 합니다.
  • 특히 예외 메시지나 API 응답 필드는 실서비스에 맞게 직접 수정해줘야 해요.

정리 및 느낀 점: 테스트 코드 작성이 무서워지지 않았다

솔직히 말하면, 예전엔 테스트 코드 쓸 때마다 손이 느려지고 의욕도 떨어졌어요. 그런데 이제는 ChatGPT가 도와주니까, 테스트 코드 작성을 '두려움 없이' 시작할 수 있게 됐습니다. 물론 여전히 손으로 다듬고 검토는 해야 하지만, 그 출발선을 넘는 데 큰 도움이 되었어요.

테스트 코드는 이제 개발자의 선택이 아니라 필수라고 생각해요. 코드의 품질, 협업, 그리고 유지보수까지 영향을 주는 요소니까요. 그리고 이런 필수 작업에 ChatGPT 같은 도구를 활용하면, 우리 개발자는 더 중요한 비즈니스 로직에 집중할 수 있습니다.


요약 정리

  • 테스트 코드 작성은 귀찮고 어려울 수 있지만, ChatGPT를 활용하면 훨씬 수월하게 시작할 수 있습니다.
  • 클래스 전체 코드를 제공하고, JUnit5/Mockito/WebMvcTest 등 구체적인 조건을 함께 명시하세요.
  • 생성된 코드가 완벽하진 않지만, 초안을 빠르게 만드는 데 큰 도움이 됩니다.
  • ChatGPT는 개발자의 생산성을 높여주는 훌륭한 도구이며, 테스트 코드 자동 생성에도 강력히 활용될 수 있습니다.

이 글이 테스트 코드 작성이 부담스러운 분들에게 실질적인 도움이 되었길 바랍니다. 이제는 "테스트 코드? 어렵지 않아요, ChatGPT가 도와줘요!"라고 말해도 되지 않을까요?

반응형