2013-04-09 53 views
2

我的单元测试配置是: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 annotati在回滚期间,我在单个单元测试方法中做出的任何更改未清除id值!自动生成的id值不会重置,因此单元测试依赖于它们的运行顺序!

如何在测试过程中重置Spring中自动生成的HSQLDB数据库字段?


也许trucate命令将帮助?

+0

你就不能忽视在测试中的ID值? – Keppil 2013-04-09 06:45:06

+1

我想检查外键是否设置正确,这些外键是指自动生成的'id' – 2013-04-09 06:46:51

回答

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

+0

不错的想法,你能举一个例子来说明如何将它与Spring/JUnit集成吗? – 2013-04-09 17:43:14

+0

编号了解如何在每次测试之前或之后运行此声明。 – fredt 2013-04-09 20:04:34

+0

这不是'@ After'简单。 DBUnit在'@ After'后测试数据库状态,lol。 – 2013-04-10 06:27:35