3

オーバーロードを使用するようにマッピング テストを変更した.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; }
}

地図:

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

(はい、私のSetUpルーチンにもいくつかのエクスポート/ドロップ スキーマがありTearDownますが、それはすべて標準的なものです。このアプリケーションを中心に構築されたテスト フレームワークにネストされすぎているため、関連する部分を掘り下げることはできません。派手なことをするのではなく、ただ派手な場所で...)

4

1 に答える 1

2

ID をマッピングする限り、すべてが機能することがわかりました。これが本来あるべき姿ですか?.VerifyTheMappings(TEntity first) は実際に何をテストしますか?

ソースを見ると、テストがどのように機能するかを簡単に確認できます

すべての VerifyTheMappings がテストしているように見えるのは、オブジェクトをコミットしてロードできるかどうかです (そのため、ID をマップするだけで済みます)。ID を保存またはロードできるかどうか以外のことをテストしたい場合はallProperties、そのオブジェクトの List にいくつかの値を取得する必要があります。これは通常、CheckPropertyまたはCheckReference呼び出しで行われます。 自動的VerifyTheMappings(T first)に入力するために特別なことは何もしません。ドキュメントには、次の正しい使用例がallProperties記載されています。

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();
}
于 2011-07-04T22:34:53.080 に答える