Модульные тесты для отображений Fluent Nhibernate - PullRequest
5 голосов
/ 06 апреля 2011

Я пытаюсь понять, как остальная часть сообщества тестирует свои сопоставления Fluent Nhibernate.Допустим, у меня есть следующие сопоставления:

    public UserHeaderMap()
    {
        Table("USER_HEADER");
        Id(x => x.Id, "USER_ID");
        Map(x => x.LoginName, "LOGIN_NAME");
        Map(x => x.UserPassword, "USER_PASSWORD");
        Map(x => x.UserEmail, "USER_EMAIL");
        Map(x => x.UserLanguage, "USER_LANGUAGE");
        Map(x => x.UserEnabled, "USER_ENABLED");

        HasManyToMany(x => x.Groups)
            .Table("USER_GROUP_COMPOSITE")
            .ParentKeyColumn("USER_ID")
            .ChildKeyColumn("GROUP_ID")
            .Cascade.All()
            .Inverse();
    }

public class GroupHeaderMap : ClassMap<GroupHeader>
{
    public GroupHeaderMap()
    {
        Table("GROUP_HEADER");
        Id(x => x.Id, "GROUP_ID");
        Map(x => x.Name, "GROUP_NAME");
        Map(x => x.Description, "GROUP_DESCRIPTION");

        HasManyToMany(x => x.Users)
            .Table("USER_GROUP_COMPOSITE")
            .ParentKeyColumn("GROUP_ID")
            .ChildKeyColumn("USER_ID");
    }
}

Какие все юнит-тесты вы бы написали для них?Вы бы использовали класс PersistenceSpecification для их модульного тестирования?

Редактировать:

Я хочу использовать SqlLite, но что, если я не генерирую свою схему из своих отображений?Могу ли я как-то загрузить свою схему в SqlLite?Также мне интересно, действительно ли достаточно тестирования SqlLite.Наш продукт должен работать как минимум на MS SQL и Oracle.Будет ли тестирование только на базе данных SqlLite соответствовать моим требованиям?Также вы обычно тестируете каждую сопоставленную сущность (Конструкторы, Свойства и т. Д.)?

1 Ответ

13 голосов
/ 06 апреля 2011

Свободный nhibernate имеет встроенные методы тестирования . С ними вы можете сделать следующее

[Test]
public void CanCorrectlyMapEmployee()
{
    new PersistenceSpecification<Employee>(session)
        .CheckProperty(c => c.Id, 1)
        .CheckProperty(c => c.FirstName, "John")
        .CheckProperty(c => c.LastName, "Doe")
        .VerifyTheMappings();
}

Этот тест будет

  • создать экземпляр Employee
  • вставить сотрудника в базу данных
  • извлечь запись в новый экземпляр Employee
  • убедитесь, что полученный Сотрудник соответствует оригиналу

Это проверит сопоставления свойств.

Также я бы предложил использовать SqlLite и тестировать реальные запросы SQL в памяти для проверки правил каскадирования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...