在单元测试期间回滚自动生成的表值

时间:2013-04-09 06:32:38

标签: java spring unit-testing hsqldb dbunit

我的单元测试配置是:JUnit,DBUnit,Spring。

在我的Spring上下文中,我有一个嵌入式数据库 -

<jdbc:embedded-database id="dataSourceSpied">
    <jdbc:script location="classpath:test_ddl.sql"/>
</jdbc:embedded-database>

我的单元测试带有以下类级别注释:

@ContextConfiguration(locations = "classpath:/test-context.xml")
@RunWith(SpringJUnit4ClassRunner.class)
@Transactional
@TestExecutionListeners({DependencyInjectionTestExecutionListener.class,
        TransactionDbUnitTestExecutionListener.class,
        DbUnitTestExecutionListener.class})

我的测试架构有以下片段:

CREATE TABLE test(
  id  BIGINT GENERATED BY DEFAULT AS IDENTITY,
  name  VARCHAR(255) NOT NULL,
  ...
);

@Transactional注释会回滚我在单个单元测试方法中所做的任何更改,但不会清除id值!自动生成的id值不会重置,因此单元测试依赖于它们的运行顺序!

如何在测试期间在Spring中重置HSQLDB的自动生成的db字段?


也许trucate命令会有帮助吗?

1 个答案:

答案 0 :(得分:0)

在您的示例中,可以修改自动生成的IDENTITY。

 ALTER TABLE test ALTER COLUMN id RESTART WITH 0

参见指南:

http://www.hsqldb.org/doc/2.0/guide/databaseobjects-chapt.html#dbc_table_manupulation