integration-testing - 这个 Fluent NHibernate 映射测试是误报吗?

标签 integration-testing fluent-nhibernate-mapping

我将我的映射测试更改为使用重载 .VerifyTheMappings(TEntity first),然后我的测试突然就通过了。我以前没有使用过该重载,并且由于我不太确定它是如何工作的,所以我担心我会误报。

我很惊讶主要是因为我认为我没有使用自动映射,我什至还没有映射整个实体。所以现在我想知道:

这个测试通过是因为它应该,还是因为它没有真正测试任何东西?

更新:经过进一步调查,我发现只要我映射 ID,一切正常。这是应该的吗? .VerifyTheMappings(TEntity first) 真的测试了什么?

我的代码:

配置

 Fluently.Configure()
     .Database(MsSqlConfiguration.MsSql2008.DefaultSchema("dbo")
     .ConnectionString(ConfigurationManager.ConnectionStrings["Nitro_Empty"].ConnectionString))
     .Mappings(m => m.FluentMappings.AddFromAssemblyOf<UserMap>());

实体:

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; }
}

map :

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);
    }

(是的,我的 SetUpTearDown 例程中也有一些导出/删除模式,但它们都是标准的。它嵌套到围绕这个应用程序构建的测试框架让我想挖掘出相关的部分,因为它没有做任何花哨的事情,只是在花哨的地方......)

最佳答案

I've found that as long as I map the ID, everything works. Is this how it's supposed to be? What does .VerifyTheMappings(TEntity first) really test?

您可以通过查看它的 source 轻松了解测试的工作原理。

所有 VerifyTheMappings 似乎都在测试它是否可以提交和加载您的对象(因此它只需要映射一个 ID)。如果您想测试除是否可以保存或加载 ID 之外的任何其他内容,则必须将一些值放入该对象的 allProperties 列表中。这通常通过 CheckPropertyCheckReference 调用来完成。 VerifyTheMappings(T first) 不会执行任何特殊操作来自动填充 allPropertiesdocumentation提供了以下正确使用示例:

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();
}

关于integration-testing - 这个 Fluent NHibernate 映射测试是误报吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6520510/

相关文章:

testing - 如何使用不同版本的先决条件来运行我的包的测试?

c# - 为什么 nhibernate 提示删除这个对象?

hibernate - NHibernate.MappingException : No persister

nhibernate - 在不创建额外列的情况下映射外键以及 NHibernate 中的引用

nhibernate - 如何将组件属性映射为实体主键的一部分?

Maven 故障安全插件不运行 testNG XML 套件

junit - 如何为崩溃的 JNI 调用编写 JUnit 测试?

grails - 由于grails-3.0.1插件应用程序中的IllegalStateException,因此无法运行集成测试

junit - Jacoco Sling Junit 集成 - 测试执行

c# - Fluent NHibernate 映射引用