Тестирование нескольких отображений в БД в MappingIntegrationTests - PullRequest
2 голосов
/ 30 июля 2010

Каков наилучший подход для тестирования нескольких БД в качестве проекта # arparch?

Текущий код SetUp () в MappingIntegrationTests пытается проверить каждую сборку на соответствие первой базе данных.mappingAssemblies = RepositoryTestsHelper.GetMappingAssemblies ();

 configuration = NHibernateSession.Init(new SimpleSessionStorage(), mappingAssemblies,
                                   new AutoPersistenceModelGenerator().Generate(),
                                   "../../../../app/Humanities.IBusiness.Web/NHibernate.config");

Кто-нибудь сумел правильно протестировать каждое сопоставление с соответствующей схемой базы данных?

Ответы [ 2 ]

3 голосов
/ 31 июля 2010

Привет, Алек, спасибо за ответ.Я немного взломал решение - оно не очень красивое, но оно делает тесты на уклонение от дыма через несколько БД

В настройках я добавляю следующее:

private List<string> sessionKeys;
        [SetUp]
        public virtual void SetUp()
        {
            string[] mappingAssemblies = RepositoryTestsHelper.GetMappingAssemblies();
            configuration = NHibernateSession.Init(new SimpleSessionStorage(), mappingAssemblies,
                                   new AutoPersistenceModelGenerator().Generate(),
                                   "../../../../app/Humanities.IBusiness.Web/NHibernate.config");

            /*NEW CODE */
            var configuration2 = NHibernateSession.AddConfiguration(DataGlobals.ROLES_DB_FACTORY_KEY,
                mappingAssemblies,
                new AutoPersistenceModelGenerator().Generate(),
                "../../../../app/Humanities.IBusiness.Web/NHibernateForRolesDb.config",null,null, null);
            sessionKeys = new List<string>();
            sessionKeys.Add(DataGlobals.DEFAULT_DB_KEY);
            sessionKeys.Add(DataGlobals.ROLES_DB_FACTORY_KEY);

ЗатемCanConfirmDatabaseMatchesMappings

foreach (var entry in allClassMetadata)
                {
                    bool found = false;
                    foreach (string key in sessionKeys)
                    {
                        ISession session = NHibernateSession.CurrentFor(key);
                        try
                        {
                            session.CreateCriteria(entry.Value.GetMappedClass(EntityMode.Poco))
                                .SetMaxResults(0).List();
                            found = true;
                        }
                        catch (Exception ex) { }

                    }
                    if (found == false)
                        throw new MappingException("Mapping not found for " + entry.Key.ToString());
                }

Не уверен, что это полный ответ, но лучше, чем ничего:)

Есть мысли?

1 голос
/ 31 июля 2010

Ал, если честно, я не знаю, насколько пользователи используют несколько баз данных.Это то, что я считаю, что некоторые очень громкие люди лоббировали в начале жизненного цикла проектов.Это то, о чем я собирался спросить сообщество, похоже, пришло время задать вопрос.

Что вам может понадобиться, это переместить код настройки в отдельные методы.Хотя я не схожу с ума от нарушения принципа СУХОЙ, похоже, в этом случае это необходимо.

...