통합 테스트가 웹 애플리케이션의 동작을 제대로 복제 할 수 있도록 스프링 및 최대 절전 모드를 어떻게 구성해야합니까?

StackOverflow https://stackoverflow.com/questions/1833339

문제

NSpring 1.2 및 Nhibernate 2를 기반으로하는 웹 응용 프로그램이 있으며 HibernateTemplate을 사용합니다. 웹 응용 프로그램은 사용하도록 구성됩니다 OpenSessionInViewModule.

우리의 통합 테스트에서는 최대 절전 모드 세션이 다음과 같이 표시됩니다. initDeferredClose 그리고 대부분의 경우 이것은 우리의 테스트에 적합합니다. 웹 응용 프로그램의 맥락에서 잘 작동하지만 테스트 하네스에서 호출 할 때 실패하는 일부 서비스 기능이 있습니다.

예를 들어 : 트랜잭션 내에서 여러 객체를 생성하고 업데이트하는 한 가지 기능이 있습니다. 함수는 트랜잭션 속성으로 표시되지만 테스트는 메시지와 함께 실패합니다.

Illegal attempt to associate a collection with two open sessions

웹 응용 프로그램에서 호출되면 거래가 성공적으로 완료됩니다.

통합 테스트가 웹 애플리케이션의 기능을 올바르게 복제 할 수 있도록 스프링 및 최대 절전 모드를 어떻게 구성해야합니까?

도움이 되었습니까?

해결책 2

통합 테스트 비품을 다시 작성하여 상속했습니다. AbstractTransactionAldBProviderspringContextTests 스프링 테스트 프레임 워크에서 제공하는 클래스.

이것은 실제로 테스트가 끝날 때 (기본적으로) 롤백으로 자체 트랜잭션에서 각 테스트를 실행합니다. 두 개의 열린 세션의 문제를 해결하는 것 외에도 테스트는 훨씬 더 빨리 실행됩니다 (매번 데이터베이스를 지울 필요가 없습니다).

스프링 테스트 프레임 워크를 사용할 때 명심해야 할 중요한 포인트는 응용 프로그램 코드의 스프링 애플리케이션 컨텍스트가 필요하고 테스트 프레임 워크의 컨텍스트가 하나이고 그렇지 않으면 외부 트랜잭션 및 내부 트랜잭션이 동일하다는 것입니다. 두 개의 다른 최대 절전 모드 세션 공장으로 만들어졌습니다

다른 팁

테스트 설정 부분에서 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();
        }
    }
}

이 샘플은 Spring의 LocalssessionFactoryObject가 ExposetransactionAwaresessionFactory가 True로 설정되어 있다고 기대합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top