首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何为开发测试配置Hibernate

如何为开发测试配置Hibernate
EN

Stack Overflow用户
提问于 2009-07-27 05:46:14
回答 2查看 357关注 0票数 1

我们是9程序员工作在java Web应用程序使用hibernate框架,但我们有问题运行(在运行模式,调试模式)项目,每次我们想测试的项目,我们必须等待Hibernate创建SessionFactory和所有关系查询!我应该怎么做才能让Hibernate工作得更快?

EN

回答 2

Stack Overflow用户

发布于 2009-07-30 12:17:59

你能否详细说明一下所需的时间:

  • It is once,or per test?,

  • ,你说的是多久?,

  • ,什么是休眠加载?(表数,或更好的总列数等)

根据你的回答,可以研究几个方向,比如通过巧妙的配置实际减少(我担心只有几个百分点)时间……

但我最初的猜测是,你可能会有一个更聪明的做法,实际上不为你的测试实例化Hibernate。这样就能解决所有问题了,不是吗?尽管这样说可能看起来很愚蠢,但我们是这样做的:

  • 我们将我们的JUnit测试分成几个类别(基于项目,或源目录,或其他...)。每个测试类别都可以单独运行(如果需要,可以询问)。
  • 我们称一个测试类别为IntegrationTesting,,它需要访问昂贵的(慢速或其他)资源源,如数据库、外部web服务或启动的其他软件(可能没有并发访问)、线程、IO、JMS、DLL、昂贵的许可证、x509证书、负载测量、超时...设置这些测试更复杂,可能不是每个工作站都能完成,并且执行它们需要更多的时间。每次开发人员开发这样的功能时,他都会经常运行适当的测试(或更多),并接受延迟。我们的自动构建每天都会运行它们,这就是我们如何确保回归detection.
  • We调用一个测试类别UnitTesting.它不需要访问昂贵的资源,因此例如它不会触发Hibernate初始化。每个开发人员都会一直执行这些测试,而且速度很快(对于一个大项目来说,几秒钟就够了)!我们不会费心去选择其中的一个...

诚然,这种测试组织会影响应用程序设计和代码,但这也是当前最佳实践所规定的,因此我们可以从中受益良多。示例:

algo之前:调用dao进行数据库通信的业务算法可以是: algo

  • one= dao.readOne()

  • a = do algo A

== do algo B

  • if (b) dao.save(one,two,a,do

  • AFTER :我们在不同的类或方法中划分更多不同的职责:
    1. one = dao.readOne()
    2. two = dao.readTwo()
    3. (a,b) =
    4. do algo AB(一,二)
      • a = do algo A(One)

      <

      • >h149>b=do algo

代码语言:javascript
复制
1. if (b) dao.save(one, two, a, b)

以前,我们不能独立于数据库测试"do algo AB“,因为它是包括数据库访问的全局过程的一部分(更重要的是,访问与逻辑混合在一起)。

之后,"do algo AB“很容易在UnitTesting中测试。

我们还发现,先进行只读数据库操作,然后进行处理,然后再进行只写数据库操作,这样做有很多优点。

  1. JUnit performance :如前所述。

请注意,Daos测试可以使用IntegrationTesting完成。实际上,在我们的项目中,我们将JUnit的重点放在UnitTesting上,并且只有很少的IntegrationTests,我们直接从UI测试它们中的大多数……IntegrationTesting的投资回报率不是很好;-)

  • 短而集中的事务:例如,我们可以有两个事务(和会话),享受复杂只读阶段的Hibernate身份保证。当算法修改实体时,Hibernate不会触发隐式更新(我们项目中的早期开发人员不知道会发生这种情况!)。如果算法决定不更新数据库,则没有时间花费在将数据发送到数据库上,也不需要取消算法事务...

  • Reusability :在许多情况下,用于计算的相应数据已经被之前调用的算法加载,因此从数据库重新加载它是一种浪费。此外,重新加载可能会携带不同的数据,从而导致脆弱的computations.

  • ...其他我现在记不起来了;-)

Junit.org站点提供了许多用于测试策略的资源。我也很喜欢Rainsberger这本优秀的书( http://www.manning.com/rainsberger/),我绝对推荐给任何使用自动化测试并且有多个开发人员的项目。:-)

票数 3
EN

Stack Overflow用户

发布于 2009-07-27 07:36:09

需要多长时间?我知道这需要一些时间,但不会太久。我不明白你在这里能做什么,如果花那么多时间的话。

你确定是会话工厂在花时间,而不是你的应用程序中在启动时初始化的其他东西吗?

您可以使用单元测试来测试代码的某一部分,从而减少整个应用程序的启动。

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

https://stackoverflow.com/questions/1186580

复制
相关文章

相似问题

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