Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unit testing 如何为Fluent nHibernate约定创建测试?_Unit Testing_Visual Studio 2010_Fluent Nhibernate_Conventions - Fatal编程技术网

Unit testing 如何为Fluent 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

我正在创造一个新的世界。我创建了一些约定,比如主键、外键和多对多表

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

目前,我正在使用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);
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);
        }
    }