使用 dbunit 时 DAO 保存方法的问题
Problem with DAO save method when using dbunit
我有一个 class 测试将组添加到数据库:
class GroupDAOTest extends TestCase {
private IDatabaseTester databaseTester;
private GroupDao groupDao;
@BeforeEach
protected void setUp() throws Exception
{
databaseTester = new JdbcDatabaseTester("org.postgresql.Driver",
"jdbc:postgresql://localhost:5432/database_school", "principal", "school");
String file = getClass().getClassLoader().getResource("preparedDataset.xml").getFile();
IDataSet dataSet = new FlatXmlDataSetBuilder().build(new File(file));
databaseTester.setDataSet(dataSet);
databaseTester.setSetUpOperation(DatabaseOperation.CLEAN_INSERT);
databaseTester.onSetup();
groupDao = new GroupDao();
}
@Test
void add() throws Exception {
groupDao.save(new Group("NEW_GROUP"));
IDataSet databaseDataSet = databaseTester.getConnection().createDataSet();
ITable actualTable = databaseDataSet.getTable("groups");
String file = getClass().getClassLoader().getResource("GroupDao/add.xml").getFile();
IDataSet expectedDataSet = new FlatXmlDataSetBuilder().build(new File(file));
ITable expectedTable = expectedDataSet.getTable("groups");
Assertion.assertEquals(expectedTable, actualTable);
}
这里是方法“groupDao.save (new Group (" NEW_GROUP "));"必须添加一个 id = 4、name = "NEW_GROUP" 的组。一旦测试通过,但当我一次又一次地 运行 时,该组被添加,但由于某种原因,id 增加了一个。对于某些发布,它已经是这样的:
[![enter image description here][1]][1]
已检查 groupDao.save () - 一切正常,尝试更改 databaseTester.setSetUpOperation (DatabaseOperation ***),但没有帮助。
你能告诉我问题出在哪里吗,也许我只是没有清除某些东西?
以防万一我的dao方法:
@Override
public void save(Group group) {
try (Connection connection = connectionProvider.getConnection();
PreparedStatement statement = connection.prepareStatement(SAVE_NEW_RECORD)) {
statement.setString(1, group.getName());
statement.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
}
和table架构:
创建 TABLE 个群组
(
group_id 串行主键,
group_name VARCHAR(10) 唯一非空
);
Once the test passed, but when I ran it again and again, the group was added, but for some reason the id grew by one.
问题不在于您的代码或配置。 PostgreSQL 串行字段类型是 auto-increment。每次将行保存到 table.
时,它会将字段值加 1
使用 dbUnit ValueComparer 断言来与大于或等于进行比较,而不是使用您当前使用的仅在相等时进行比较的断言方法。
http://dbunit.sourceforge.net/datacomparisons/valuecomparer.html
我有一个 class 测试将组添加到数据库:
class GroupDAOTest extends TestCase {
private IDatabaseTester databaseTester;
private GroupDao groupDao;
@BeforeEach
protected void setUp() throws Exception
{
databaseTester = new JdbcDatabaseTester("org.postgresql.Driver",
"jdbc:postgresql://localhost:5432/database_school", "principal", "school");
String file = getClass().getClassLoader().getResource("preparedDataset.xml").getFile();
IDataSet dataSet = new FlatXmlDataSetBuilder().build(new File(file));
databaseTester.setDataSet(dataSet);
databaseTester.setSetUpOperation(DatabaseOperation.CLEAN_INSERT);
databaseTester.onSetup();
groupDao = new GroupDao();
}
@Test
void add() throws Exception {
groupDao.save(new Group("NEW_GROUP"));
IDataSet databaseDataSet = databaseTester.getConnection().createDataSet();
ITable actualTable = databaseDataSet.getTable("groups");
String file = getClass().getClassLoader().getResource("GroupDao/add.xml").getFile();
IDataSet expectedDataSet = new FlatXmlDataSetBuilder().build(new File(file));
ITable expectedTable = expectedDataSet.getTable("groups");
Assertion.assertEquals(expectedTable, actualTable);
}
这里是方法“groupDao.save (new Group (" NEW_GROUP "));"必须添加一个 id = 4、name = "NEW_GROUP" 的组。一旦测试通过,但当我一次又一次地 运行 时,该组被添加,但由于某种原因,id 增加了一个。对于某些发布,它已经是这样的:
[![enter image description here][1]][1]
已检查 groupDao.save () - 一切正常,尝试更改 databaseTester.setSetUpOperation (DatabaseOperation ***),但没有帮助。 你能告诉我问题出在哪里吗,也许我只是没有清除某些东西?
以防万一我的dao方法:
@Override
public void save(Group group) {
try (Connection connection = connectionProvider.getConnection();
PreparedStatement statement = connection.prepareStatement(SAVE_NEW_RECORD)) {
statement.setString(1, group.getName());
statement.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
}
和table架构:
创建 TABLE 个群组 ( group_id 串行主键, group_name VARCHAR(10) 唯一非空 );
Once the test passed, but when I ran it again and again, the group was added, but for some reason the id grew by one.
问题不在于您的代码或配置。 PostgreSQL 串行字段类型是 auto-increment。每次将行保存到 table.
时,它会将字段值加 1使用 dbUnit ValueComparer 断言来与大于或等于进行比较,而不是使用您当前使用的仅在相等时进行比较的断言方法。 http://dbunit.sourceforge.net/datacomparisons/valuecomparer.html