首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Hibernate / Spring / JUnit实现复杂数据库状态的设置与拆除

用Hibernate / Spring / JUnit实现复杂数据库状态的设置与拆除
EN

Stack Overflow用户
提问于 2009-05-05 01:01:04
回答 8查看 5.8K关注 0票数 10

我有一个正在进行单元测试的类,在运行各个测试方法之前,它需要相当广泛的数据库设置。此设置需要很长时间:由于希望与当前问题无关的原因,我需要以编程方式填充DB,而不是从SQL转储填充。

我的问题是拆卸。如何轻松回滚在数据库安装阶段所做的所有更改?

我目前正在使用Hibernate + Spring事务性测试支持,这样我的单个测试方法就被封装在事务中。

一种解决方案是在每个测试方法内进行db设置,使得db设置将自动回滚。但是,测试方法将永远运行,因为每个方法都需要重新准备数据库。

还有其他想法吗?基本上,我正在寻找一种方法来运行我的数据库设置,运行我的单独测试(每个测试都包装在一个事务中,在执行后被回滚),然后回滚初始的数据库设置。有什么想法可以让它以Hibernate / Spring / Junit的方式工作吗?有没有Hibernate的"drop all tables“命令?

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2009-05-05 07:24:52

您是否坚持使用特定的数据库供应商?如果没有,您可以使用内存中的数据库,比如HSQLDB。当您完成测试时,您只需丢弃状态。这仅适用于在测试套件开始时(即在编程设置之前)表可以为空的情况。

您仍然需要创建表,但是如果使用Hibernate整齐地映射了所有内容,则可以使用hbm2ddl生成表。您需要做的就是将以下内容添加到您的测试会话工厂定义中:

代码语言:javascript
复制
<session-factory>
    ...
    <property name="hibernate.hbm2ddl.auto">create</property>
    ...
</session-factory>

如果这个解决方案看起来适用,我可以详细说明。

票数 6
EN

Stack Overflow用户

发布于 2009-05-05 01:52:21

你可能想看看Junit 4的@AfterClass注解,这个注解将在测试完成时运行。

http://cwiki.apache.org/DIRxDEV/junit4-primer.html

票数 0
EN

Stack Overflow用户

发布于 2009-05-05 01:52:27

在这方面,DNUnit应该会对你有所帮助。如果您愿意,您可以为每个单独的测试用例创建单独的数据集。

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

https://stackoverflow.com/questions/822846

复制
相关文章

相似问题

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