【发布时间】:2013-03-31 11:07:46
【问题描述】:
我的单元测试配置是:JUnit、DBUnit、Spring。
在我的 Spring 上下文中,我有一个嵌入式数据库 - hsqldb
<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