본문 바로가기
Spring

Spring Legacy에서 JUnit4로 MyBatis 단위 테스트 하기

by holy season 2025. 4. 9.
반응형

단위 테스트

개발을 하다 보면, 만들어둔 기능이 잘되는 지 확인하고 싶을때가 있다. 그럴때는 JUnit4를 이용해서 각각 기능별로 단위테스트(Unit Test) 를 진행하면, 안정적으로 동작 여부를 검증할 수 있게 된다.

MyBatis 단위 테스트

Spring Legacy 환경에서는 간단한 테스트나 빠른 검증이 필요할 때, Spring Context 없이도 MyBatis만으로 Mapper를 테스트할 수 있다.

pom.xml

먼저 pom.xml 파일에 단위테스트를 하기 위하여 JUnit4와 Spring-Test 라이브러리를 추가한다.

        <!-- JUnit4 -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.7</version>
            <scope>test</scope>
        </dependency>

        <!-- Spring-test-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>3.2.9.RELEASE</version>
            <scope>test</scope>
        </dependency>

Test 파일 생성

테스트 하고자 하는 Mybatis Mapper파일을 선택 한 후 New > Other 에서 JUnit Test Case를 생성한다.

New Ohter
JUnit Test Case 생성

MyBatis 연결 및 테스트

@BeforeClass를 사용하여 @Test가 진행 되기 전에 Sqlsession 객체를 생성한다.

Sqlsession에는 데이터베이스 연결 및 Config 파일 설정을 해준다.

package com.spring.demo.config.persistence;

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

import java.util.HashMap;
import java.util.List;

import org.apache.ibatis.datasource.pooled.PooledDataSource;
import org.apache.ibatis.mapping.Environment;
import org.apache.ibatis.session.Configuration;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.apache.ibatis.transaction.TransactionFactory;
import org.apache.ibatis.transaction.jdbc.JdbcTransactionFactory;
import org.junit.BeforeClass;
import org.junit.Test;

public class ApiConfigServiceTest {
	
	private static SqlSessionFactory sqlSessionFactory; 
	
	@BeforeClass
	public static void setup() throws Exception {
		// 1. 데이터베이스 연결
		PooledDataSource dataSource = new PooledDataSource();
		dataSource.setDriver("net.sf.log4jdbc.sql.jdbcapi.DriverSpy");
		dataSource.setUrl("jdbc:log4jdbc:postgresql://127.0.01:5432/database");
		dataSource.setUsername("user");
		dataSource.setPassword("password");
		
		// 2. config 생성 및 설정
		TransactionFactory transactionFactory = new JdbcTransactionFactory();
		Environment env = new Environment("dev", transactionFactory, dataSource);
		Configuration config = new Configuration(env);
		
		// 3. Mapper 등록 (패키지 전체 등록도 가능)
        config.addMappers("com.spring.demo");

        // 4. SqlSessionFactory 생성
        sqlSessionFactory = new SqlSessionFactoryBuilder().build(config);
	}

	@Test
	public void testListApi() throws Exception {
		SqlSession session = sqlSessionFactory.openSession();
        ApiConfigService service = session.getMapper(ApiConfigService.class);

        List<HashMap<String, Object>> listAPI = service.listApi();
        
        assertEquals("map", listAPI.get(0).get("api_name"));
        assertEquals("weather", listAPI.get(1).get("api_name"));
	}

}

JUnit Test 진행

Run As에서 JUnit Test를 진행한다.

JUnit Test 진행
JUnit 성공 모습

참고

JUnit4 설정

Spring과 JUnit의 버전이 호환되지 않아 실행이 안될때가 있는데 그럴때는 설정에서 JUnit 버전을 변경해줘야 한다.

 

Run Configuration
JUnit4 설정

반응형