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.
Nie należy tego robić z CheckReference :) –