2008-12-07 13 views
10

Jak można przetestować ten scenariusz?Jak przetestować Fluent-NHibernate's PersistenceSpecification.VerifyTheMappings z listami i obiektami relacyjnymi?

Właśnie zacząłem zaglądać do NHibernate i po raz pierwszy w TDD. Do tej pory bardzo mi się to podobało i używam fluent-Nhibernate do mapowania zajęć.

Jednak wydaje się, że uderzam w ślepy zaułek, jeśli chodzi o użycie metody VerifyTheMappings na PersistenceSpecification.

Zasadniczo mam dwie klasy: Odbiorca i Lista adresatów. Klasa RecipientList ma mapowanie do odbiorcy z płynną „hasMany” relacji:

public class RecipientListMap : ClassMap<RecipientList> 
{ 

    public RecipientListMap() 
    { 
     Id(x => x.ID); 
     Map(x => x.ApplicationID); 
     Map(x => x.Name); 
     Map(x => x.IsDeleted); 
     HasMany<Recipient>(x => x.Recipients).WithKeyColumn("RecipientListID").AsList().LazyLoad(); 
    } 

} 

Jednak kiedy użyć następującego kodu w moim teście:

private IList<Recipient> _recipients = new List<Recipient>() 
     { 
      new Recipient { FirstName = "Joe", LastName = "Bloggs", Email = "[email protected]", IsDeleted = false }, 
      new Recipient { FirstName = "John", LastName = "Doe", Email = "[email protected]", IsDeleted = false }, 
      new Recipient { FirstName = "Jane", LastName = "Smith", Email = "[email protected]", IsDeleted = false } 
     }; 

     [Test] 
     public void Can_Add_RecipientList_To_Database() 
     { 
      new PersistenceSpecification<RecipientList>(Session) 
       .CheckProperty(x => x.Name, "My List") 
       .CheckProperty(x => x.Columns, "My columns") 
       .CheckProperty(x => x.IsDeleted, false) 
       .CheckProperty(x => x.ApplicationID, Guid.NewGuid()) 
       .CheckProperty(x => x.Recipients, _recipients) 
       .VerifyTheMappings(); 
     } 

Następujący błąd:

failed: System.ApplicationException : Expected 'System.Collections.Generic.List`1[Project.Data.Domains.Recipients.Recipient]' but got 'NHibernate.Collection.Generic.PersistentGenericBag`1[Project.Data.Domains.Recipients.Recipient]' for Property 'Recipients' 

Widzę, że błąd jest spowodowany tym, że przechodzę na listę, a zwrócona lista to PersistentGenericBag, co powoduje błąd. Nie rozumiem, jak możesz to sprawdzić, jeśli nie możesz po prostu przekazać IList?

Każda pomoc zostanie doceniona.

Odpowiedz

9

Cóż, tak głupio użyłem niewłaściwej metody w PeristenceSpecification.

Powinienem był używać CheckList nie CheckProperty.

Duh!

+0

Nie należy tego robić z CheckReference :) –

Powiązane problemy