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の動作をテストしています。