微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用dbunit

如何解决使用dbunit

我有一个测试将组添加数据库的类:

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”));”必须添加一个ID = 4的组,名称=“ 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();
        }
    }

和表模式:

创建表组 ( group_id串行主键, group_name VARCHAR(10)唯一性非NULL );

解决方法

一旦测试通过,但是当我一次又一次地运行时,就添加了该组,但是由于某种原因,id增长了一个。

问题与您的代码或配置无关。 PostgreSQL串行字段类型为自动递增。每次将表保存行时,它会将字段值加1。

使用dbUnit ValueComparer断言来代替大于或等于您当前使用的断言方法,该方法仅在相等时进行比较。 http://dbunit.sourceforge.net/datacomparisons/valuecomparer.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。