4

我正在创建一个set of conventions for Fluent nHibernate。我创建了一些约定,如主键,外键和多对多表。如何为Fluent nHibernate约定创建一个测试?

我想能够用内存数据库测试这些约定,看看我是否正确地编写了这些约定。

目前,我正在使用一个SQLite内存数据库是这样设置的nHibernate:

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测试项目的约定的单元测试?

+0

正是我在找什么。但是想要在DataAnnotation中测试列的配置为属性'StringLength'和'Required'。你有没有找到解决方案? – ridermansb 2013-05-21 13:28:55

+0

我没有找到任何解决方案。我不再在同一个地方工作,项目也没有起飞。 – 2013-05-21 13:33:57

回答

0

我所做的不是针对数据库进行测试,而是测试生成的映射。因此,例如我有一个约定,说,所有外键是这样写的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); 
     } 
    } 

顺便说一句。对数据库进行测试不会太困难,只是尝试从TestClass2中选择一些内容并确保没有抛出异常......但我认为我展示的方式更容易,我相信当FluentNhibernate可以生成正确的NHibernate映射,NHibernate可以为我生成正确的查询。

相关问题