Как создать тест для соглашений Fluent nHibernate? - PullRequest
4 голосов
/ 03 августа 2010

Я создаю набор соглашений для Fluent nHibernate . Я создаю несколько соглашений, таких как первичный ключ, внешний ключ и таблица «многие ко многим».

Я бы хотел иметь возможность протестировать эти соглашения с базой данных в памяти, чтобы увидеть, правильно ли я закодировал эти соглашения.

В настоящее время я настраиваю nHibernate, используя базу данных SQlite в памяти, например:

Configuration configuration = null;

var factory = Fluently.Configure()
    .Database(SQLiteConfiguration.Standard.InMemory().ShowSql())
    .Mappings(m => 
        {
            m.FluentMappings.AddFromAssemblyOf<DataLayer>();
            m.FluentMappings.Conventions.AddFromAssemblyOf<DataLayer>();
        })
    .ExposeConfiguration((c) => configuration = c)
    .BuildSessionFactory();

var session = factory.OpenSession();

var export = new SchemaExport(configuration);
export.Execute(true, true, false, session.Connection, null);

Я создаю тестовый пример, но я не знаю, как тестировать соглашение об именах. Как можно выполнить некоторые модульные тесты на соглашениях, используя тестовый проект Visual Studio?

1 Ответ

0 голосов
/ 19 августа 2014

Я не тестировал базу данных, а просто тестировал сгенерированное отображение. Так, например, у меня есть соглашение, которое гласит, что все внешние ключи пишутся как ID, и я проверяю это как (я использую xunit, а не mstest, но, надеюсь, вы можете получить концепцию ...):

    [Fact]
    public void AddDefaultConventions_ShouldNameMappingToForeinKeyCorrectly()
    {
        var configuration = Fluently.Configure()
        .Database(MsSqlConfiguration.MsSql2008)
        .Mappings(m =>
        {
            m.FluentMappings.Conventions.Add(new CustomForeignKeyConvention());
            m.FluentMappings.Add<TestClassMap>();
            m.FluentMappings.Add<TestClass2Map>();
        })
        .BuildConfiguration();
        var typeMapping = configuration.GetClassMapping(typeof(TestClass2));
        var property = typeMapping.GetProperty("Parent");
        Assert.Equal("ParentID", property.ColumnIterator.First().Text);
    }

    private class TestClass
    {
        public virtual int ID { get; set; }
    }

    private class TestClass2
    {
        public virtual int ID { get; set; }
        public virtual TestClass Parent { get; set; }
    }

    private class TestClassMap : ClassMap<TestClass>
    {
        public TestClassMap()
        {
            Id(x => x.ID);
        }
    }

    private class TestClass2Map : ClassMap<TestClass2>
    {
        public TestClass2Map()
        {
            Id(x => x.ID);
            References(x => x.Parent);
        }
    }

Btw. это не будет слишком сложно для тестирования на БД, просто попробуйте выбрать что-то из TestClass2 и убедитесь, что нет исключений ... но я думаю, что способ, который я показал, проще, и я верю, что когда FluentNhibernate может генерировать правильный NHibernate сопоставляя, NHibernate может генерировать правильные запросы для меня.

...