JUnit과 Mockito를 사용해 java 테스트코드 작성하기

신수연·2025년 8월 11일

Intro

내가 작성한 코드가 제대로 동작하는지 확인하는 가장 좋은 방법은 테스트 코드를 실행해 보는 것입니다.
지난번에 자바 객체지향 설계 실습으로 구현한 ‘Hangman Game’ 프로젝트에 이번에는 JUnit과 Mockito를 활용해 테스트 코드를 작성해보려 합니다!


💫 Junit, Mockito

1. JUnit – 테스트 실행기 & 검증 도구

| "테스트를 작성하고 실행"하는 프레임워크
| 테스트 메서드를 작성하고, 예상 결과와 실제 결과를 비교해서 맞는지 확인

2. Mockito – 가짜 객체(Mock) 생성기

| 테스트 대상이 의존하는 객체를 가짜로 만들어주는 라이브러리
| 실제 DB, API, 네트워크 같은 외부 자원에 연결하지 않고 동작을 흉내냄

💫 실습

0. 테스트할 실습파일 준비하기

HangMan Game을 구현한 프로젝트에 테스트코드를 작성해보겠다. 이 프로젝트는 Maven프로젝트가 아니므로 .jar파일을 다운로드해서 라이브러리를 추가해주겠다.

1. JUnit, Mockito .jar파일 다운받기

https://mvnrepository.com/

2. 라이브러리 추가


각 라이브러리가 잘 작동하는 지 테스트 해보자

JUnit Test

| 잘 되는걸 볼 수 있다

Mockito

module java.base does not "opens java.lang" to unnamed module

? 실행 안됨 => java.lang을 열 수 없다

--add-opens java.base/java.lang=ALL-UNNAMED
java.base 모듈 안에 있는 java.lang 패키지를 모든 "이름 없는 모듈"을 열어주도록 옵션 추가하기

이제 잘 된다.

💫 테스트코드 작성하기

package test;

import static org.junit.jupiter.api.Assertions.assertEquals;

import java.io.ByteArrayInputStream;
import java.io.InputStream;

import org.junit.jupiter.api.Test;

import dev.GameController;

public class GameControllerTest {

    @Test
    void testInputCategory_withSystemIn() {
        // 테스트할 입력값, 엔터(줄바꿈) 포함
        String simulatedUserInput = "5\n0\n2\n";
        InputStream originalIn = System.in;
        try {
            // System.in 을 시뮬레이션 입력 스트림으로 변경
            ByteArrayInputStream testIn = new ByteArrayInputStream(simulatedUserInput.getBytes());
            System.setIn(testIn);

            int category = GameController.inputCategory();

            assertEquals(2, category);
        } finally {
            // 테스트 후 원래 System.in 복구
            System.setIn(originalIn);
        }
    }
}

결론

0개의 댓글