Как проверить, что коллекция правильно извлечена из базы данных? - PullRequest
0 голосов
/ 05 июля 2011

Я пытаюсь написать интеграционный тест для своего репозитория, но я не могу найти хороший способ утверждать, что результаты - это то, чего я хочу.

У меня есть класс со статическими свойствами длявсе мои тестовые данные - проекты, пользователи и т. д. В настройках моего теста я вставляю все эти объекты в свою базу данных с помощью NHibernate (и я смог убедиться, что это работает - записи там, как они должны после установкизавершено).

Мой репозиторий (немного упрощенный) делает это:

public IEnumerable<MyEntity> GetEntitiesByProjectID(id)
{
    return session.Linq<MyEntity>().Where(e => e.Project.ID == id).ToList();
}

В моем тесте я пытаюсь утверждать, что результаты верны, как в примере кода ниже, ноколлекции не эквивалентны по нескольким причинам - первичная, которая ссылается на другие объекты, заменяется прокси-замками (Castle.Proxies.UserProxy вместо User).

Assert.AreElementsEqualIgnoreOrder(
    Data.MyEntites.Where(e => e.Project.ID == 1), results)

Есть и некоторые другие странности, напримерспособ отображения даты и времени.В моих типах .NET строковые представления datetime - 2011-07-05T14:28:11.5655935+02:00, а из базы данных - 2011-07-05T14:28:11.0000000, то есть без индикатора часового пояса.

По проверке я могу убедиться, что хранилище действительно полученоправильные элементы, так что мой тест явно проверяет не то.

Что я здесь не так делаю?

1 Ответ

0 голосов
/ 05 июля 2011

Вы уверены, что нужно тестировать слой данных?Я считаю, что NHIbernate был хорошо протестирован, и вы должны протестировать свой уровень обслуживания и предоставить имитацию для данных.

Если это не так, установите для отложенной загрузки значение false во время тестирования интеграции, это должно помочь разрешить UserProxy, а не проблему пользователя.Для проблемы datetime, пожалуйста, проверьте, какой тип данных имеет столбец в базе данных: datetime, datetime2, date ... проверьте, поддерживает ли ваш столбец часовые пояса

...