[java] 데이터베이스 유닛 테스트를 위한 JDBC mocking

소프트웨어 개발 프로세스에서 유닛 테스트(Unit Test)는 매우 중요한 단계입니다. 여기서는 데이터베이스 유닛 테스트를 위한 JDBC mocking에 대해 알아보겠습니다.

1. JDBC mocking이란?

JDBC mocking은 실제 데이터베이스에 대한 의존성을 없애고 가짜 데이터베이스 동작을 모방하는 것입니다. 데이터베이스 연결 및 쿼리 실행이 필요한 코드를 테스트할 때, 실제 데이터베이스를 사용하면 테스트 속도가 느려지고 의존성이 생기게 됩니다. 따라서 JDBC mocking을 사용하여 가짜 데이터베이스를 만들어 유닟 테스트 속도를 향상시킬 수 있습니다.

2. JDBC mocking 라이브러리

JDBC mocking을 하기 위한 여러 라이브러리가 있지만, 여기서는 MockitoH2 Database를 사용한 예제를 보여드리겠습니다.

Mockito

Mockito는 자바를 위한 모킹(Mocking) 라이브러리로, 가짜 객체를 쉽게 만들 수 있고, 그 동작을 제어할 수 있습니다.

// Mockito를 사용하여 PreparedStatement를 mock 객체로 만드는 예제
PreparedStatement preparedStatement = Mockito.mock(PreparedStatement.class);

H2 Database

H2 Database는 인-메모리 데이터베이스로, 실제 데이터베이스처럼 동작하지만 메모리상에 데이터를 보관합니다. 유닢 테스트 시에 매우 유용하게 사용될 수 있습니다.

3. JDBC mocking을 사용한 유닛 테스트 예제

아래는 JDBC mocking을 사용하여 데이터베이스 연동 코드를 테스트하는 예제입니다.

@RunWith(MockitoJUnitRunner.class)
public class DatabaseUnitTest {

    @Mock
    private Connection connection;

    @Mock
    private PreparedStatement preparedStatement;

    @Test
    public void testDatabaseOperation() throws SQLException {
        Mockito.when(connection.prepareStatement("SELECT * FROM users")).thenReturn(preparedStatement);
        Mockito.when(preparedStatement.executeQuery()).thenReturn(Mockito.mock(ResultSet.class));

        // 테스트할 데이터베이스 연동 코드 실행
        // ...

        // 결과 검증
        // ...
    }
}

위의 예제에서는 Mockito를 사용하여 Connection 및 PreparedStatement를 mock으로 만들고, 테스트에 필요한 동작을 정의한 후 데이터베이스 연동 코드를 테스트하고 그 결과를 검증합니다.

이처럼 JDBC mocking을 사용하면 실제 데이터베이스에 의존하지 않고도 데이터베이스 연동 코드를 유닛 테스트할 수 있습니다.


참고 문헌: