生成された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);
}
}

