/// <summary>
        /// Тест наличия каскадной зависимости для ссылок на другие сущьности в класе.
        /// </summary>
        public virtual void CascadeDependenceRuleExisitForNHMappedEntityRelationTest(PersistentClass mapping, Property prop, IDeleteRule related)
        {
            if (IgnoreProperties.ContainsKey(mapping.MappedClass) && IgnoreProperties[mapping.MappedClass].Any(x => x.PropertyName == prop.Name))
            {
                Assert.Ignore(IgnoreProperties[mapping.MappedClass].First(x => x.PropertyName == prop.Name).ReasonForIgnoring);
            }

            var info = DeleteConfig.GetDeleteRule(mapping.MappedClass);

            Assert.That(info.DeleteItems.Any(x => x.ParentPropertyName == prop.Name && x.IsCascade),
                        "Cвойство {0}.{1} не имеет каскадного правила удаления, хотя класс {2} помечен как требующий каскадного удаления.",
                        info.ObjectClass.Name,
                        prop.Name,
                        related.ObjectClass.Name);
        }
        //FIXME Лучше в будущем разделить тест на разные. Сейчас было лень переписывать код.
        public virtual void NHMappedCollectionsAllInOneTest(PersistentClass mapping, Property prop)
        {
            var ignored =
                IgnoreCollections.FirstOrDefault(x => x.ParentClass == mapping.MappedClass && x.PropertyName == prop.Name);

            if (ignored != null)
            {
                Assert.Ignore(ignored.ReasonForIgnoring);
            }

            var  collectionMap      = (prop.Value as Bag);
            Type collectionItemType = null;

            if (collectionMap.Element is OneToMany)
            {
                collectionItemType = (collectionMap.Element as OneToMany).AssociatedClass.MappedClass;
            }
            else if (collectionMap.Element is ManyToOne)
            {
                collectionItemType = (collectionMap.Element as ManyToOne).Type.ReturnedClass;
            }

            var collectionItemClassInfo = DeleteConfig.GetDeleteRule(collectionItemType);

            Assert.That(collectionItemClassInfo, Is.Not.Null,
                        "Класс {0} не имеет правил удаления, но используется в коллекции {1}.{2}.",
                        collectionItemType,
                        mapping.MappedClass.Name,
                        prop.Name);

            var info = DeleteConfig.GetDeleteRule(mapping.MappedClass);

            Assert.That(info, Is.Not.Null,
                        "Коллекция {0}.{1} объектов {2} замаплена в ненастроенном классе.",
                        mapping.MappedClass.Name,
                        prop.Name,
                        collectionItemType.Name);

            if (collectionMap.IsOneToMany)
            {
                var deleteDepend = info.DeleteItems.Find(r => r.ObjectClass == collectionItemType && r.CollectionName == prop.Name);
                Assert.That(deleteDepend, Is.Not.Null,
                            "Для коллекции {0}.{1} не определены зависимости удаления класса {2}",
                            mapping.MappedClass.Name,
                            prop.Name,
                            collectionItemType.Name
                            );
            }
            else
            {
                var removeDepend = collectionItemClassInfo.RemoveFromItems.Find(r => r.ObjectClass == info.ObjectClass && r.CollectionName == prop.Name);
                Assert.That(removeDepend, Is.Not.Null,
                            "Для коллекции {0}.{1} не определены зависимости удаления элементов при удалении класса {2}",
                            mapping.MappedClass.Name,
                            prop.Name,
                            collectionItemType.Name
                            );
            }

            if (collectionItemClassInfo is IHibernateDeleteRule)
            {
                Assert.That(info, Is.InstanceOf <IHibernateDeleteRule>(),
                            "Удаление через Hibernate элементов коллекции {0}.{1}, поддерживается только если удаление родительского класса {0} настроено тоже через Hibernate",
                            mapping.MappedClass.Name,
                            prop.Name
                            );
            }
        }