使用流畅的非hibernate映射进行持久性规范测试
本文关键字:范测试 持久性 测试 映射 hibernate | 更新日期: 2023-09-27 18:11:35
我最近一直在玩流利的nhibernate &更具体地说,持久性规范测试。
然而,在运行一个相对简单的nunit测试时,我一直遇到sql lite错误,当为这一行的测试构建模式时:(SessionSource.BuildSchema(Session))。
System.Data.SQLite。SQLiteException:语法中"/"附近的SQLite错误误差
寻求一些指导,我做错了什么,因为我是相对较新的流利。是否有更简单的方法来排除此错误消息?
public class Contact
{
public int Id { get; protected set; }
// some other properties
public IList<Note> Notes { get; set; }
}
public ContactMapping()
{
Not.LazyLoad();
Id(m => m.Id).GeneratedBy.Identity();
HasMany(x => x.Notes).KeyColumns.Add("ContactId");
}
public class Note
{
public int Id { get; protected set; }
public Contact Contact { get; set; }
public string Title { get; set; }
public string Description { get; set; }
}
public NoteMapping()
{
Not.LazyLoad();
Id(m => m.Id).GeneratedBy.Identity();
Map(m => m.Title).Not.Nullable().Length(250);
Map(m => m.Description).Not.Nullable().Length(2500);
References(x => x.Contact).Column("ContactId").Cascade.All();
}
配置:public void SetupContext()
{
var cfg = Fluently.Configure()
.Database(SQLiteConfiguration.Standard
.ShowSql()
.InMemory
);
SessionSource = new SessionSource(cfg.BuildConfiguration()
.Properties, PersistenceModel());
Session = SessionSource.CreateSession();
SessionSource.BuildSchema(Session);
}
private static PersistenceModel PersistenceModel()
{
var model = new PersistenceModel();
model.AddMappingsFromAssembly(typeof(Contact).Assembly);
return model;
}
最后是持久性测试:
new PersistenceSpecification<Contact>(Session)
.CheckProperty(c => c.Id, 1)
.CheckProperty(c => c.First, "Coding")
.CheckProperty(c => c.Last, "Quiz")
.CheckProperty(c => c.Email, "mail@test.com")
.CheckReference(c => c.Notes, new Note { Title = "Title", Description = "Description" })
.VerifyTheMappings();
您应该在上述代码中使用PersistanceSpecification
类中的CheckList
而不是CheckReference
。
好吧,我觉得有点傻。我在最初的文章中排除的一列是DateTime字段,它的默认值设置不正确,从而在构建模式时生成无效的sql。
在构建模式时输出表的配置突出了我的错误。