Unit testing 如何为Fluent nHibernate约定创建测试?
我正在创造一个新的世界。我创建了一些约定,比如主键、外键和多对多表 我希望能够用内存数据库测试这些约定,看看我是否正确地编码了这些约定 目前,我正在使用SQlite内存数据库设置nHibernate,如下所示:Unit testing 如何为Fluent nHibernate约定创建测试?,unit-testing,visual-studio-2010,fluent-nhibernate,conventions,Unit Testing,Visual Studio 2010,Fluent Nhibernate,Conventions,我正在创造一个新的世界。我创建了一些约定,比如主键、外键和多对多表 我希望能够用内存数据库测试这些约定,看看我是否正确地编码了这些约定 目前,我正在使用SQlite内存数据库设置nHibernate,如下所示: Configuration configuration = null; var factory = Fluently.Configure() .Database(SQLiteConfiguration.Standard.InMemory().ShowSql()) .Ma
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);
Configuration=null;
var factory=fluntly.Configure()
.Database(SQLiteConfiguration.Standard.InMemory().ShowSql())
.Mappings(m=>
{
m、 FluentMappings.AddFromAssemblyOf();
m、 FluentMappings.Conventions.AddFromAssemblyOf();
})
.ExposeConfiguration((c)=>configuration=c)
.BuildSessionFactory();
var session=factory.OpenSession();
var export=新的SchemaExport(配置);
export.Execute(true、true、false、session.Connection、null);
我创建了一个测试用例,但我不知道如何测试命名约定。如何使用Visual Studio测试项目在约定上实现一些单元测试?我所做的不是针对数据库进行测试,而是测试生成的映射。例如,我有一个约定,即所有外键都是像ID一样编写的,我会像ID一样进行测试(我使用xunit而不是mstest,但希望您能得到这个概念……:
[事实]
public void AddDefaultConventions\u shouldname mappingToForeinkeyRightly()
{
var configuration=fluntly.Configure()
.Database(MsSqlConfiguration.MsSql2008)
.Mappings(m=>
{
m、 添加(新的CustomForeignKeyConvention());
m、 FluentMappings.Add();
m、 FluentMappings.Add();
})
.BuildConfiguration();
var typeMapping=configuration.GetClassMapping(typeof(TestClass2));
var property=typeMapping.GetProperty(“父”);
Assert.Equal(“ParentID”,property.ColumnIterator.First().Text);
}
私有类TestClass
{
公共虚拟整数ID{get;set;}
}
私有类TestClass2
{
公共虚拟整数ID{get;set;}
公共虚拟测试类父级{get;set;}
}
私有类TestClassMap:ClassMap
{
公共TestClassMap()
{
Id(x=>x.Id);
}
}
私有类TestClass2Map:ClassMap
{
公共TestClass2Map()
{
Id(x=>x.Id);
参考文献(x=>x.Parent);
}
}
顺便说一句,对DB进行测试不会太困难,只要试着从TestClass2中选择一些东西,并确保没有抛出异常。。。但我认为我展示的方式更简单,我相信当FluentNhibernate可以生成正确的NHibernate映射时,NHibernate可以为我生成正确的查询。正是我所寻找的。但希望测试列的配置,如DataAnnotation中的属性
StringLength
和Required
。你找到解决办法了吗?我没有找到任何解决办法。我再也不在同一个地方工作了,项目也从未启动过。
[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);
}
}