ホーム > Java > MyBatis > 生成されたMapperの動作確認

生成されたMapperの動作確認

生成されたMapperの動作確認をDbUnitを使用して行ってみる。 テスト用データはcsvファイルで用意する。

1. CsvDataSetLoaderの作成

テスト用データをcsvファイルで用意するので、CsvDataSetLoaderクラスを作成する。

CsvDataSetLoader.java

package com.ziqoo.demo.loader;

import org.dbunit.dataset.IDataSet;
import org.dbunit.dataset.csv.CsvDataSet;
import org.springframework.core.io.Resource;

import com.github.springtestdbunit.dataset.AbstractDataSetLoader;

public class CsvDataSetLoader extends AbstractDataSetLoader {

    @Override
    protected IDataSet createDataSet(Resource resource) throws Exception {
        return new CsvDataSet(resource.getFile());
    }

}

2. 対象マッパー

  • テーブルはmaker_mst、マッパーはMakerMstMapperを対象にテストする。 こちら参照

3. テストデータ

投入データ

src/test/resources/maker_mst_mapper/setup/maker_mst.csv

"id","maker_name","create_at","update_at","version"
8,"タミヤ",2021-04-25 20:18:13.168,2021-04-25 20:18:13.168,0
9,"グンゼ",2021-08-26 18:21:32.073,2021-08-26 18:21:32.073,0
10,"GSIクレオス",2021-08-26 20:15:19.353,2021-08-26 20:15:19.353,2

src/test/resources/maker_mst_mapper/setup/table-ordering.txt

maker_mst

検証データ

以下各フォルダーには上記table-ordering.txtも配置する。

削除結果

src/test/resources/maker_mst_mapper/exp/delete/maker_mst.csv

"id","maker_name","create_at","update_at","version"
8,"タミヤ",2021-04-25 20:18:13.168,2021-04-25 20:18:13.168,0
10,"GSIクレオス",2021-08-26 20:15:19.353,2021-08-26 20:15:19.353,2

登録結果(全カラム)

src/test/resources/maker_mst_mapper/exp/insert/maker_mst.csv

"id", "maker_name","create_at","update_at","version"
1000,"test",2022-01-19 13:10:00,2022-01-19 13:10:00,1

登録結果(カラム指定)

src/test/resources/maker_mst_mapper/exp/insert_selective/maker_mst.csv

"id", "maker_name","create_at","update_at","version"
1000,"test",2022-01-19 13:10:00,2022-01-19 13:10:00,0

更新結果(全カラム)

src/test/resources/maker_mst_mapper/exp/update/maker_mst.csv

"id", "maker_name","create_at","update_at","version"
9,"test",2022-01-19 13:10:00,2022-01-19 13:10:00,1

更新結果(カラム指定)

src/test/resources/maker_mst_mapper/exp/update_selective/maker_mst.csv

"id","maker_name","create_at","update_at","version"
9,"test",2021-08-26 18:21:32.073,2021-08-26 18:21:32.073,0

4. テストプログラム

src/test/java/com/ziqoo/demo/dao/table/mapper/MakerMstMapperTest.java

package com.ziqoo.demo.dao.table.mapper;

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

import java.time.LocalDateTime;
import java.util.List;

import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.context.SpringBootTest.WebEnvironment;
import org.springframework.test.context.TestExecutionListeners;
import org.springframework.test.context.support.DependencyInjectionTestExecutionListener;
import org.springframework.test.context.transaction.TransactionalTestExecutionListener;
import org.springframework.transaction.annotation.Transactional;

import com.github.springtestdbunit.DbUnitTestExecutionListener;
import com.github.springtestdbunit.annotation.DatabaseOperation;
import com.github.springtestdbunit.annotation.DatabaseSetup;
import com.github.springtestdbunit.annotation.DbUnitConfiguration;
import com.github.springtestdbunit.annotation.ExpectedDatabase;
import com.github.springtestdbunit.assertion.DatabaseAssertionMode;
import com.ziqoo.demo.dao.table.model.MakerMst;
import com.ziqoo.demo.dao.table.model.MakerMstExample;
import com.ziqoo.demo.loader.CsvDataSetLoader;

import lombok.extern.slf4j.Slf4j;

@Slf4j
@SpringBootTest(webEnvironment = WebEnvironment.NONE)
@DbUnitConfiguration(dataSetLoader = CsvDataSetLoader.class)
@TestExecutionListeners({
        DependencyInjectionTestExecutionListener.class,
        TransactionalTestExecutionListener.class,
        DbUnitTestExecutionListener.class })
@Transactional
class MakerMstMapperTest {

    /** テスト対象Mapper. */
    @Autowired
    private MakerMstMapper mapper;

    @BeforeAll
    static void setUpBeforeClass() throws Exception {
    }

    @AfterAll
    static void tearDownAfterClass() throws Exception {
    }

    @BeforeEach
    void setUp() throws Exception {
    }

    @AfterEach
    void tearDown() throws Exception {
    }

    /**
     * カウント.
     * @throws Exception
     */
    @Test
    @DatabaseSetup(type = DatabaseOperation.REFRESH, value = "/maker_mst_mapper/setup")
    void testCountByExample() throws Exception {
        MakerMstExample exp = new MakerMstExample();
        exp.createCriteria().andIdBetween(8, 9);

        assertEquals(2L, mapper.countByExample(exp));
    }

    /**
     * 削除(検索条件指定).
     * @throws Exception
     */
    @Test
    @DatabaseSetup(type = DatabaseOperation.REFRESH, value = "/maker_mst_mapper/setup")
    @ExpectedDatabase(table = "maker_mst", query = "select * from maker_mst where id between 8 and 10", value = "/maker_mst_mapper/exp/delete", assertionMode = DatabaseAssertionMode.NON_STRICT_UNORDERED)
    void testDeleteByExample() throws Exception {
        MakerMstExample exp = new MakerMstExample();
        exp.createCriteria().andMakerNameEqualTo("グンゼ");
        int cnt = mapper.deleteByExample(exp);

        assertEquals(1, cnt);
    }

    /**
     * 削除(主キー指定).
     * @throws Exception
     */
    @Test
    @DatabaseSetup(type = DatabaseOperation.REFRESH, value = "/maker_mst_mapper/setup")
    @ExpectedDatabase(table = "maker_mst", query = "select * from maker_mst where id between 8 and 10", value = "/maker_mst_mapper/exp/delete", assertionMode = DatabaseAssertionMode.NON_STRICT_UNORDERED)
    void testDeleteByPrimaryKey() throws Exception {
        int cnt = mapper.deleteByPrimaryKey(9);
        log.debug("{}", cnt);

        assertEquals(1, cnt);
    }

    /**
     * 登録(全カラム).
     * @throws Exception
     */
    @Test
    @ExpectedDatabase(table = "maker_mst", query = "select * from maker_mst where maker_name = 'test'", value = "/maker_mst_mapper/exp/insert", assertionMode = DatabaseAssertionMode.NON_STRICT_UNORDERED)
    void testInsert() throws Exception {
        MakerMst record = new MakerMst();
        record.setId(1000);
        record.setMakerName("test");
        LocalDateTime now = LocalDateTime.of(2022, 1, 19, 13, 10, 0);
        record.setCreateAt(now);
        record.setUpdateAt(now);
        record.setVersion(1);
        int cnt = mapper.insert(record);

        assertEquals(1, cnt);
    }

    /**
     * 登録(カラム指定).
     * @throws Exception
     */
    @Test
    @ExpectedDatabase(table = "maker_mst", query = "select * from maker_mst where maker_name = 'test'", value = "/maker_mst_mapper/exp/insert_selective", assertionMode = DatabaseAssertionMode.NON_STRICT_UNORDERED)
    void testInsertSelective() throws Exception {
        MakerMst record = new MakerMst();
        record.setId(1000);
        record.setMakerName("test");
        LocalDateTime now = LocalDateTime.of(2022, 1, 19, 13, 10, 0);
        record.setCreateAt(now);
        record.setUpdateAt(now);
        int cnt = mapper.insertSelective(record);

        assertEquals(1, cnt);
    }

    /**
     * 検索(検索条件指定).
     * @throws Exception
     */
    @Test
    @DatabaseSetup(type = DatabaseOperation.REFRESH, value = "/maker_mst_mapper/setup")
    void testSelectByExample() throws Exception {
        MakerMstExample exp = new MakerMstExample();
        exp.createCriteria().andMakerNameEqualTo("タミヤ");
        List<MakerMst> list = mapper.selectByExample(exp);
        list.forEach(maker -> log.debug("{}, {}, {}", maker.getId(), maker.getMakerName(), maker.getVersion()));

        assertEquals(1, list.size());
        MakerMst maker = list.get(0);
        assertEquals(8, maker.getId());
        assertEquals("タミヤ", maker.getMakerName());
        assertEquals(0, maker.getVersion());
    }

    /**
     * 検索(主キー指定).
     * @throws Exception
     */
    @Test
    @DatabaseSetup(type = DatabaseOperation.REFRESH, value = "/maker_mst_mapper/setup")
    void testSelectByPrimaryKey() throws Exception {
        MakerMst maker = mapper.selectByPrimaryKey(9);

        assertEquals(9, maker.getId());
        assertEquals("グンゼ", maker.getMakerName());
        assertEquals(0, maker.getVersion());
    }

    /**
     * 更新(検索条件指定、カラム指定)
     * @throws Exception
     */
    @Test
    @DatabaseSetup(type = DatabaseOperation.REFRESH, value = "/maker_mst_mapper/setup")
    @ExpectedDatabase(table = "maker_mst", query = "select * from maker_mst where id = 9", value = "/maker_mst_mapper/exp/update_selective", assertionMode = DatabaseAssertionMode.NON_STRICT_UNORDERED)
    void testUpdateByExampleSelective() throws Exception {
        MakerMst record = new MakerMst();
        // maker_nameのみ更新
        record.setMakerName("test");

        MakerMstExample exp = new MakerMstExample();
        exp.createCriteria().andIdEqualTo(9);

        int cnt = mapper.updateByExampleSelective(record, exp);
        assertEquals(1, cnt);
    }

    /**
     * 更新(検索条件指定、全カラム)
     * @throws Exception
     */
    @Test
    @DatabaseSetup(type = DatabaseOperation.REFRESH, value = "/maker_mst_mapper/setup")
    @ExpectedDatabase(table = "maker_mst", query = "select * from maker_mst where id = 9", value = "/maker_mst_mapper/exp/update", assertionMode = DatabaseAssertionMode.NON_STRICT_UNORDERED)
    void testUpdateByExample() throws Exception {
        MakerMst record = new MakerMst();
        record.setId(9);
        record.setMakerName("test");
        LocalDateTime now = LocalDateTime.of(2022, 1, 19, 13, 10, 0);
        record.setCreateAt(now);
        record.setUpdateAt(now);
        record.setVersion(1);

        MakerMstExample exp = new MakerMstExample();
        exp.createCriteria().andIdEqualTo(9);

        int cnt = mapper.updateByExample(record, exp);
        assertEquals(1, cnt);
    }

    /**
     * 更新(主キー指定、カラム指定)
     * @throws Exception
     */
    @Test
    @DatabaseSetup(type = DatabaseOperation.REFRESH, value = "/maker_mst_mapper/setup")
    @ExpectedDatabase(table = "maker_mst", query = "select * from maker_mst where id = 9", value = "/maker_mst_mapper/exp/update_selective", assertionMode = DatabaseAssertionMode.NON_STRICT_UNORDERED)
    void testUpdateByPrimaryKeySelective() throws Exception {
        MakerMst record = new MakerMst();
        record.setId(9);
        record.setMakerName("test");

        int cnt = mapper.updateByPrimaryKeySelective(record);
        assertEquals(1, cnt);
    }

    /**
     * 更新(主キー指定、全カラム)
     * @throws Exception
     */
    @Test
    @DatabaseSetup(type = DatabaseOperation.REFRESH, value = "/maker_mst_mapper/setup")
    @ExpectedDatabase(table = "maker_mst", query = "select * from maker_mst where id = 9", value = "/maker_mst_mapper/exp/update", assertionMode = DatabaseAssertionMode.NON_STRICT_UNORDERED)
    void testUpdateByPrimaryKey() throws Exception {
        MakerMst record = new MakerMst();
        record.setId(9);
        record.setMakerName("test");
        LocalDateTime now = LocalDateTime.of(2022, 1, 19, 13, 10, 0);
        record.setCreateAt(now);
        record.setUpdateAt(now);
        record.setVersion(1);

        int cnt = mapper.updateByPrimaryKey(record);
        assertEquals(1, cnt);
    }

}

リンク

コーポレートサイトにちょうどいいCMS、baserCMS