1

Fluent NHibernateの永続性をテストするいくつかの問題が出ています。私はこれが単に私の分かっていないことや、テストの不適切な期待であるかどうかは分かりません。もしそうなら、DALのこの部分の単体テストをどのようにして設定するのがよいのか、誰にもアドバイスがありますか?「一対多」関係をテストする際に重複を取得していますか?

ワン:

私は1対多の関係を持つクラスClientFacilityのペアを持ってClientこのFluentNHibernateのマッピング構造を使用して、多くのFacility

を持つことができ、私は思います期待どおりに見えるはずです:

public class ClientMapping : DataMapping<Client> 
{ 
    public ClientMapping() 
    { 
     HasMany(client => client.Facilities) 
      .Inverse() 
      .Cascade 
      .All(); 
    } 
} 

public class FacilityMapping : DataMapping<Facility> 
{ 
    public FacilityMapping() 
    { 
     References(fac => fac.Owner); 
    } 
} 

私はFNHのアドバイスに従いました以下のようなテストを作成するときに実行すると - 私は単一のオブジェクトを渡しているにもかかわらず、2つのクライアントとFacilityテーブルの2つの異なるIDを持つClientテーブルを取得します。私が見つけた

[Test] 
    public void CanCorrectlyCreateFacilityTable() 
    { 
     _client = new Client {Name = "Preston"}; 

     new PersistenceSpecification<Facility>(session, new DataEqualityComparer()) 
      .CheckProperty(f => f.Id, 1) 
      .CheckProperty(f => f.Name, _facility1.Name) 
      .CheckReference(f => f.Owner, _client) 
      .VerifyTheMappings(); 

     new PersistenceSpecification<Facility>(session, new DataEqualityComparer()) 
      .CheckProperty(f => f.Id, 2) 
      .CheckProperty(f => f.Name, _facility2.Name) 
      .CheckReference(f => f.Owner, _client) 
      .VerifyTheMappings(); 

    } 

Client Table

Facility Table

最寄のQ/Aは、以下のものをですが、最初のClientテストを実行している、私は、データベースの状態ので、おそらく(同じ結果を得るように見える場合でも、各試験のためにリセット自体):

Cascade persist creates duplicate rows?

Hibernate - one to Many relationship

答えて

0

私の期待は間違っていました。 Persistence Specificationテストは、データがデータベースにヒットする場所をテストするだけなので、実行するたびに新しい項目を送信します。

[Test] 
    public void CanSaveAndLoadFacilityMapping() 
    { 
     object id; 
     object id2; 

     using (var trans = _session.BeginTransaction()) 
     { 
      id = _session.Save(_facility1); 
      id2 = _session.Save(_facility2); 

      trans.Commit(); 
     } 

     _session.Clear(); 

     using (var trans = _session.BeginTransaction()) 
     { 
      var facility = _session.Get<Facility>(id); 
      var facility2 = _session.Get<Facility>(id2); 

      Assert.AreEqual(facility.Name, _facility1.Name); 
      Assert.AreEqual(facility.Owner.Name, _client.Name); 
      Assert.AreEqual(facility2.Owner.Name, _client.Name); 
      Assert.AreEqual(facility.Owner.Id, facility2.Owner.Id); 

      trans.Dispose(); 
     } 
    } 
:マッピングが、私は以下のようなテストを書くために必要なデータを正しくカスケード接続されているかどうかをテストする

関連する問題