【问题标题】:Rollback auto-generated table values during unit tests在单元测试期间回滚自动生成的表值
【发布时间】:2013-03-31 11:07:46
【问题描述】:

我的单元测试配置是: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 命令会有所帮助?

【问题讨论】:

  • 你不能忽略测试中的 id 值吗?
  • 我想检查外键是否设置正确,那些外键是指自动生成的id

标签: hsqldb java spring unit-testing hsqldb dbunit


【解决方案1】:

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

 ALTER TABLE test ALTER COLUMN id RESTART WITH 0

查看指南:

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

【讨论】:

  • 好主意,你能提供一个如何与 Spring/JUnit 集成的例子吗?
  • 没有。了解如何在每次测试之前或之后运行此语句。
  • 这不是@After 简单。 DBUnit 在@After 之后测试数据库状态,哈哈。
猜你喜欢
  • 2010-09-10
  • 1970-01-01
  • 2018-05-26
  • 2016-05-09
  • 2012-04-14
  • 2011-02-18
  • 1970-01-01
  • 2010-09-07
  • 1970-01-01
相关资源
最近更新 更多