Как запустить код установки и демонтажа с каждым тестом в MSpec?

У меня есть общий код для установки и отключения NHibernate, который мне нужен почти во всех моих тестах. Есть ли способ включить код «необходимость всех тестов» в одном месте, а затем применить его ко всем тестам? (т.е. как методы Nunit setup и teardown)

[Subject("Accessing the TAE allocation page")]
public class when_a_request_to_the_tae_allocation_page_is_made
{
    Establish context = () => NHTestHelper.StartTest(); //need for all tests

    Because of = () => result = new AllocationController(true).Index();

    It should_display_the_page = () => result.ShouldBeAView();

    Cleanup nh = () => NHTestHelper.EndTest(); //need for all tests

    static ActionResult result;
}

person Alistair    schedule 06.05.2011    source источник


Ответы (1)


Создайте класс, использующий интерфейс IAssemblyContext. Ваши классы спецификации не наследуются от этого.

 public class DataSpecificationBase : IAssemblyContext
    {
        public static Configuration configuration;

        void IAssemblyContext.OnAssemblyComplete()
        {

            NHibernateSession.CloseAllSessions();
            NHibernateSession.Reset();

        }

        void IAssemblyContext.OnAssemblyStart()
        {
            HibernatingRhinos.Profiler.Appender.NHibernate.NHibernateProfiler.Initialize();

            string[] mappingAssemblies = RepositoryTestsHelper.GetMappingAssemblies();
            configuration = NHibernateSession.Init(new SimpleSessionStorage(),
                                                   mappingAssemblies,
                                                   new AutoPersistenceModelGenerator().Generate(),
                                                   "database.config");

            InitializeUserSession();            

            Console.WriteLine("OnAssemblyStart");
        }

        void InitializeUserSession()
        {
            ITWEntityRepo entityRepo = new TWEntityRepo();
            // TWEntity entity  = entityRepo.GetByUserName("1EB6472B-965B-41D5-8D77-3880D02FF518");
            TWEntity entity = entityRepo.GetByUserName("87BCA093-0B8C-4FDF-ABE8-1A843BA03608");

            UserSession.Instance().User = UserFactory.Create(entity);
        }
    }
person Jason Watts    schedule 06.05.2011
comment
@Alistair: это выполняется не для каждого теста, а один раз для всех. - person Matthias; 13.07.2015
comment
Этот ответ, вероятно, не то, что хотел ОП! Методы AssemblyContext выполняются ОДИН РАЗ для ВСЕХ тестов, а методы NUnit Setup и TearDown выполняются ОДИН РАЗ для КАЖДОГО теста! В MSpec нет концепции, которую вы ищете. - person D.R.; 13.07.2015