gpt4 book ai didi

unit-testing - 如何为 Fluent nHibernate 约定创建测试?

转载 作者:行者123 更新时间:2023-12-01 06:47:28 24 4
gpt4 key购买 nike

我正在创建一个 set of conventions for 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 测试项目对约定进行一些单元测试?

最佳答案

我所做的不是针对数据库进行测试,而是仅测试生成的映射。因此,例如我有一个约定,它说所有外键都像 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 可以为我生成正确的查询。

关于unit-testing - 如何为 Fluent nHibernate 约定创建测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3397960/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com