Integration testing 这个流畅的NHibernate映射测试是假阳性吗?
我将映射测试改为使用重载Integration testing 这个流畅的NHibernate映射测试是假阳性吗?,integration-testing,fluent-nhibernate-mapping,Integration Testing,Fluent Nhibernate Mapping,我将映射测试改为使用重载。验证映射(TEntity first),突然我的测试通过了。我以前从未使用过这种过载,因为我不确定它是如何工作的,我担心我会得到一个假阳性 我很惊讶,主要是因为我认为我没有使用自动映射,甚至还没有映射出整个实体。所以现在我想知道: 该测试通过是因为它应该通过,还是因为它没有真正测试任何东西? 更新:进一步调查后,我发现只要我映射ID,一切都会正常工作。应该是这样的吗?.VerifyTheMappings(TEntity first)真正测试的是什么 我的代码: 配置 流
。验证映射(TEntity first)
,突然我的测试通过了。我以前从未使用过这种过载,因为我不确定它是如何工作的,我担心我会得到一个假阳性
我很惊讶,主要是因为我认为我没有使用自动映射,甚至还没有映射出整个实体。所以现在我想知道:
该测试通过是因为它应该通过,还是因为它没有真正测试任何东西?
更新:进一步调查后,我发现只要我映射ID,一切都会正常工作。应该是这样的吗?.VerifyTheMappings(TEntity first)
真正测试的是什么
我的代码:
配置
流利。配置()
.Database(MsSqlConfiguration.MsSql2008.DefaultSchema(“dbo”)
.ConnectionString(ConfigurationManager.ConnectionString[“Nitro_Empty”].ConnectionString))
.Mappings(m=>m.FluentMappings.AddFromAssemblyOf());
实体:
公共类检查对象:IEntity
{
公共虚拟整数ID{get;set;}
公共虚拟项目{get;set;}
公共虚拟检查对象类型{get;set;}
公共虚拟用户CreatedByUser{get;set;}
创建的公共虚拟日期时间{get;set;}
公共虚拟日期时间上次更新{get;set;}
公共虚拟用户LastUpdatedByUser{get;set;}
公共虚拟字符串Littera{get;set;}
公共虚拟字符串所有者{get;set;}
公共虚拟字符串地址{get;set;}
公共虚拟字符串管理器{get;set;}
公共虚拟字符串注释{get;set;}
公共虚拟浮点位置x{get;set;}
公共虚拟浮点位置{get;set;}
公共虚拟浮点位置z{get;set;}
}
地图:
公共类检查对象映射:类映射
{
公共检查对象映射()
{
Id(i=>i.Id).Not.Nullable();
}
}
测试:
[测试]
public void ispartition object_MappingsAreOK()
{
var dtenow=DateTime.Now;
dtenow=newdatetime(dtenow.Ticks-(dtenow.Ticks%TimeSpan.TicksPerSecond),dtenow.Kind);
var io=新的检查对象
{
ID=1,
Project=Data.Project,
类型=Data.InspectionObjectTypeVilla,
CreatedByUser=Data.Consultant,
已创建=dtenow,
LastUpdatedByUser=Data.UserConsultant1,
LastUpdated=dtenow.AddHours(1),
Littera=“15”,
所有者=“Fastighetsägare”,
Address=“Address”,
看守人=“Fastighetsskötare”,
备注=“Anteckningar”,
位置X=1F,
位置Y=2F,
位置Z=3F
};
var session=IoC.Resolve();
新的持久性规范。验证应用程序(io);
}
(是的,我在我的设置
和拆卸
例程中也有一些导出/删除模式,但它们都是标准的。它只是嵌入了围绕该应用程序构建的测试框架中,有点太深了,我不想挖掘相关部分,因为它没有做任何花哨的事情,只是在花哨的地方……)
我发现只要我把地图
好的,一切正常。是这样的吗
应该是吗?什么是
.验证应用程序(优先权)
真的要考试吗
通过查看测试的
所有VerifyTheMappings似乎都在测试它是否可以提交和加载对象(因此它只需要映射一个ID)。如果要测试除是否可以保存或加载ID之外的任何内容,则必须在该对象的allProperties
列表中获取一些值。这通常通过CheckProperty
或CheckReference
调用来完成<代码>验证应用程序(T优先)不会执行任何特殊操作来自动填充所有属性。提供了以下正确使用示例:
public void CanCorrectlyMapEmployee()
{
new PersistenceSpecification<Employee>(session, new CustomEqualityComparer())
.CheckProperty(c => c.Id, 1)
.CheckProperty(c => c.FirstName, "John")
.CheckProperty(c => c.LastName, "Doe")
.CheckReference(c => c.Store, new Store() {Name = "MyStore"})
.VerifyTheMappings();
}
public void CanCorrectlyMapEmployee()
{
新的PersistenceSpecification(会话,新的CustomEqualityComparer())
.CheckProperty(c=>c.Id,1)
.CheckProperty(c=>c.FirstName,“John”)
.CheckProperty(c=>c.LastName,“Doe”)
.CheckReference(c=>c.Store,newstore(){Name=“MyStore”})
.验证应用程序();
}
非常感谢-这回答了我的问题(回答为“是”),并解释了原因。干杯
public class InspectionObject : IEntity<int>
{
public virtual int ID { get; set; }
public virtual Project Project { get; set; }
public virtual InspectionObjectType Type { get; set; }
public virtual User CreatedByUser { get; set; }
public virtual DateTime Created { get; set; }
public virtual DateTime LastUpdated { get; set; }
public virtual User LastUpdatedByUser { get; set; }
public virtual string Littera { get; set; }
public virtual string Owner { get; set; }
public virtual string Address { get; set; }
public virtual string Caretaker { get; set; }
public virtual string Remarks { get; set; }
public virtual float PlacementX { get; set; }
public virtual float PlacementY { get; set; }
public virtual float PlacementZ { get; set; }
}
public class InspectionObjectMap : ClassMap<InspectionObject>
{
public InspectionObjectMap()
{
Id(i => i.ID).Not.Nullable();
}
}
[Test]
public void IspectionObject_MappingsAreOK()
{
var dtenow = DateTime.Now;
dtenow = new DateTime(dtenow.Ticks - (dtenow.Ticks % TimeSpan.TicksPerSecond), dtenow.Kind);
var io = new InspectionObject
{
ID = 1,
Project = Data.Project,
Type = Data.InspectionObjectTypeVilla,
CreatedByUser = Data.Consultant,
Created = dtenow,
LastUpdatedByUser = Data.UserConsultant1,
LastUpdated = dtenow.AddHours(1),
Littera = "15",
Owner = "Fastighetsägare",
Address = "Adress",
Caretaker = "Fastighetsskötare",
Remarks = "Anteckningar",
PlacementX = 1F,
PlacementY = 2F,
PlacementZ = 3F
};
var session = IoC.Resolve<ISession>();
new PersistenceSpecification<InspectionObject>.VerifyTheMappings(io);
}
public void CanCorrectlyMapEmployee()
{
new PersistenceSpecification<Employee>(session, new CustomEqualityComparer())
.CheckProperty(c => c.Id, 1)
.CheckProperty(c => c.FirstName, "John")
.CheckProperty(c => c.LastName, "Doe")
.CheckReference(c => c.Store, new Store() {Name = "MyStore"})
.VerifyTheMappings();
}