我们有一个网应用基于NSpring1.2和它能够2和使用HibernateTemplate.该网络应用程序配置为使用 OpenSessionInViewModule.

在我们的一体化测试,然而休眠届会议为标明为 InitDeferredClose 大部分此作为我们的测试。有一些服务职能工作的现在该上下文的网页应用程序而失败的时候从一个测试束。

例如:我有一个功能创建和更新一个数量目的内的事务。该功能的标记与交易的属性,但试验失败的消息:

Illegal attempt to associate a collection with two open sessions

当从网应用程序的交易的成功完成

我应如何配置弹簧和休眠所以,我一体化试验的复制适当的评价网的应用程序?

有帮助吗?

解决方案 2

我重写了我的一体化试验装置继承的 AbstractTransactionalDbProviderSpringcontexttests 类提供的弹测试框架。

这确实运行每一个测试在其自己的交易与(默认)rollback在测试结束。除了解决该问题的两次公开会议,我的测试运行一个快得多(不需要清除的数据库每次)。

重要的一点要记住,当使用的弹测试框架,这是必要的,以确保春天应用方面的应用代码和测试框架的一个相同的另外事务和内部事务将由两个不同的休眠届会议的工厂

其他提示

你应该创建一个SessionScope实例在设置的一部分测试,然后关闭(的处置)在最后(清除).这应该模仿OSIV模型得很好。这里有一个简化的样品:

using System;
using NHibernate;
using NUnit.Framework;
using Spring.Data.NHibernate.Support;

[TestFixture]
public class OsivKindOfTest
{
    private SessionScope scope;
    // get LocalSessionFactoryObject from somewhere
    // see Spring.Testing.NUnit and auto-injection
    private ISessionFactory sessionFactory;

    [SetUp]
    public void OnSetUp()
    {
        scope = new SessionScope(sessionFactory, null, true, FlushMode.Never, true);
    }

    public void TestSomething()
    {
        // just a dummy demo
        Console.WriteLine(sessionFactory.GetCurrentSession().Statistics.EntityCount);
    }

    [TearDown]
    public void TearDown()
    {
        if (scope != null)
        {
            scope.Dispose();
        }
    }
}

这样品的预计,春天的LocalSessionFactoryObject有ExposeTransactionAwareSessionFactory设置为真正的

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top