繁体   English   中英

为每个单元测试重建Hibernate sessionFactory(使用spring框架)

[英]Hibernate sessionFactory rebuilt for each unit test (using spring framework)

我将Spring的AbstractTransactionalDataSourceSpringContextTests用于我的持久性单元测试,而我的问题是我的测试太慢了:1 method = 5s,每个其他方法至少要再花一秒钟。 我有300多个db表,因此启动缓慢可能是可以理解的。 但是,我查阅了日志,令人惊讶的事情之一是为每个测试方法重建了Hibernate sessionFactory。 而且这是每种其他方法的运行时成本的一半。

我不应该能够重用原始的sessionFactory吗?

我已经对源代码进行了一些深入研究,但还没有找到一种强制重用sessionFactory的明显方法。

有任何想法吗?

还有其他加快持久性单元测试的想法吗?

(Spring 2.5和Hibernate 3.2ish,hsqldb)

您应该编写一个左右的帮助器类,以便可以包装ISessionFactory API,最好将其设置为static ,因为该API实例化非常昂贵,因此只能创建一次。

您应该尝试找到sessionFactories的创建位置(我敢打赌,在每个setUp()方法中都会以某种方式创建一个新的sessionFactories)。 然后,您可以将创建的内容移到一个单独的类中,也可以移到一个静态方法中,该类在内部确保仅创建了一个实例(有点像Singleton)。

每次,我们整个SpringContext都会得到刷新,我认为这与我们所做的一些动态spring上下文模糊地相关。 但是,杂耍是基于每个类的,因此完全不需要对每种方法进行刷新。

这样的“解决方案”就是跳过上下文刷新,从而避免会话工厂重新创建。

我仍然不确定为什么Spring认为需要为每次刷新从头开始重建会话工厂。 我想为他们重建是进行会话刷新的最简单方法,但希望它不是最快的方法。

感谢您的答复。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM