Mybatisで単体テストを書く

Mybatisで単体テストを書く

MyBatisでの単体テストの例を示します。
以下は、test_userテーブルに対する単体テストのサンプルです。

1. MyBatis Mapperの設定

まず、UserMapper.xmlというファイルにMapperの設定を書きます。

<mapper namespace="com.example.mapper.UserMapper">
    <select id="selectUserById" parameterType="int" resultType="com.example.domain.User">
        SELECT * FROM test_user WHERE id = #{id}
    </select>
</mapper>

2. MyBatis Mapperのインターフェース

次に、Mapperのインターフェースを作成します。

package com.example.mapper;

import com.example.domain.User;
import org.apache.ibatis.annotations.Select;

public interface UserMapper {
    @Select("SELECT * FROM test_user WHERE id = #{id}")
    User selectUserById(int id);
}

3. テストクラスの作成

JUnitを使用してテストを作成します。
UserMapperTest.javaというファイルを作成し、テストを記述します。

package com.example.mapper;

import com.example.domain.User;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.Assertions;
import org.mockito.Mockito;

public class UserMapperTest {

    private SqlSession sqlSession;
    private UserMapper userMapper;

    @BeforeEach
    public void setUp() {
        // SqlSessionのモックを作成
        sqlSession = Mockito.mock(SqlSession.class);
        userMapper = sqlSession.getMapper(UserMapper.class);
    }

    @Test
    public void testSelectUserById() {
        // テストデータを用意
        User testUser = new User();
        testUser.setId(1);
        testUser.setName("Test User");

        // モックの振る舞いを定義
        Mockito.when(userMapper.selectUserById(1)).thenReturn(testUser);

        // メソッド呼び出しとアサーション
        User result = userMapper.selectUserById(1);
        Assertions.assertNotNull(result);
        Assertions.assertEquals("Test User", result.getName());
    }
}

4. ドメインクラスの作成

Userクラスを定義します。

package com.example.domain;

public class User {
    private int id;
    private String name;

    // Getters and Setters
    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

この例では、JUnitを使ってMyBatisのMapperメソッドを単体テストしています。
Mockitoライブラリを使用して、SqlSessionのモックを作成し、UserMapperの動作をテストしています。