Как проверить постоянство спецификации Fluent-NHibernate.VerifyTheMappings со списками и реляционными объектами? - PullRequest
10 голосов
/ 07 декабря 2008

Как бы вы протестировали этот сценарий?

Я только начал изучать NHibernate и получил свой первый удар в TDD. До сих пор мне это очень нравилось, и я использовал свободное владение Nhibernate для составления карт своих классов.

Однако, похоже, я зашел в тупик, когда дело доходит до использования метода VerifyTheMappings в PersistenceSpecification.

По сути, у меня есть два класса, Recipient и RecipientList. Класс RecipientList имеет сопоставление с Получателем со свободным отношением «HasMany»:

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

}

Однако, когда я использую следующий код в моем тесте:

private IList<Recipient> _recipients = new List<Recipient>()
        {
            new Recipient { FirstName = "Joe", LastName = "Bloggs", Email = "joe@bloggs.com", IsDeleted = false },
            new Recipient { FirstName = "John", LastName = "Doe", Email = "john@doe.com", IsDeleted = false },
            new Recipient { FirstName = "Jane", LastName = "Smith", Email = "john@smith.com", 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();
        }

Произошла следующая ошибка:

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'

Я вижу, что ошибка в том, что я передаю список, а возвращаемый список представляет собой PersistentGenericBag, поэтому выдает ошибку. Я не понимаю, как вы думаете, проверить это, хотя, если вы не можете просто пройти IList?

Любая помощь будет оценена.

1 Ответ

9 голосов
/ 11 декабря 2008

Ну, глупо, я использовал неправильный метод в PeristenceSpecification.

Я должен был использовать CheckList, а не CheckProperty.

Duh!

...