首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >没有重置模拟HSQL db并导致JBehave测试之间违反约束的序列

没有重置模拟HSQL db并导致JBehave测试之间违反约束的序列
EN

Stack Overflow用户
提问于 2014-02-17 10:45:52
回答 2查看 1.5K关注 0票数 0

在用我们的API (Spring+Hibernate)编写BDD测试时,我遇到了排序问题。我们使用JBehave作为BDD运行程序和HSQL。

基本上,我创建了下面的案例来解释我遇到的问题。

我有两个故事。这两个故事都插入到一个名为DUMMYPRODUCT的表中。我们指定,在每个场景之前,我们清除所有数据并使用以下方法重置架构,

“截断模式公共重新启动标识并不提交检查”

然后我们使用一个预定义的sql脚本重新初始化表数据,其中包含两个插入到DUMMYPRODUCT,

和重置序列(据推测)使用

删除序列DUMMYPRODUCT_SEQ,创建序列DUMMYPRODUCT_SEQ,以3次递增10开始;

但是我遇到了非常奇怪的行为,因为故事和场景之间的序列并不是重置的。相反,它们似乎继续到下一个故事/场景,然后在内部重置,即不进入下一个序列块,从而导致违反约束的情况发生。

exception=java.sql.SQLIntegrityConstraintViolationException:完整性约束违反:唯一约束或索引冲突;SYS_PK_10216表: DUMMYPRODUCT

DUMMYPRODUCTID插入DUMMYPRODUCT的行为

(DUMMYPRODUCTID)

第一个故事

场景

3.

4.

下一个故事

场景

5

6

7

8

9

10

11

12

3.

4.

5例外

7例外

9例外

场景

11

12

3.

4.

5

6

7

8

9

10

11例外

13

14

15

16

17

18

19

20

21

22

23

24

25

26

场景

27

28

29

30

31

32

3.

4.

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27例外

29例外

您在过去的HSQL实现中遇到过这样的问题吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-03-01 13:40:01

在将db作为单独的实例运行并更改为H2db之后,我们找到了问题的根源。数据库不喜欢每次运行的场景中被删除、重新创建或更改的序列。我们将脚本分离为数据插入脚本和序列更改脚本。使用dbunit清除数据,然后是每次运行时的insert脚本。序列仅在启动时更改,bdd故事按预期顺序递增。

票数 0
EN

Stack Overflow用户

发布于 2014-02-17 16:05:36

语句重新启动表中声明的标识序列:

代码语言:javascript
复制
TRUNCATE TABLE T RESTART IDENTITY AND COMMIT NO CHECK

此语句对架构中的所有表执行上述操作,并重置表之外的序列:

代码语言:javascript
复制
TRUNCATE SCHEMA PUBLIC RESTART IDENTITY AND COMMIT NO CHECK

删除序列的语句将永久地删除它。当您再次创建它时,没有留下它的痕迹。

所有这些都可以用最新的HSQLDB2.3.X进行测试--您可能使用的是旧版本,或者可能没有实际执行您的一条语句。注意,您应该用一个语句删除序列,然后用另一个语句再次创建它。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21826937

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档