Как выполнить интеграционные тесты для проверки загруженных объектов (сначала код EF4) - PullRequest
2 голосов
/ 17 февраля 2011

Вот простой сценарий, чтобы объяснить, что я пытаюсь сделать.Скажем, я создаю движок блогов, и у меня есть 2 сущности, Post и Comment, с отношением «один ко многим» между ними.На моем сервисном уровне у меня есть логика запросов для получения сведений о публикации, которая выглядит следующим образом:

Post post = new PostByIdQuery(_unitOfWork).WithPostId(5).Execute();

Эта строка кода выполнит запрос, который будет извлекать сущность сообщения из базы данных с идентификаторомзначение 5. Этот объект запроса уже закодирован и проходит интеграционные тесты с использованием реальной базы данных.

Существует два бизнес-процесса, в которых мне может потребоваться получить сообщение по указанному идентификатору, если я редактирую сообщениеили когда я показываю сообщение с его комментариями.Этот объект запроса отлично работает для обоих сценариев, но при отображении поста с комментариями это влияет на производительность, поскольку список комментариев по умолчанию загружается с отложенной загрузкой.Таким образом, итерация комментариев к сообщению вызовет несколько обращений к базе данных.

Конечно, если я всегда стремлюсь загрузить комментарии к сообщению, если я просто редактирую сообщение, это вызывает ненужные объединения таблиц.

Таким образом, я хочу добавить новый метод в свободный интерфейс, который будет определять, следует ли загружать комментарии с отложенной загрузкой или нет. Вопрос в том, как написать интеграционный тест, который проверяет, загружена ли таблица комментариев с нетерпением илине так ли это новое требование может быть проверено всякий раз, когда выполняются модульные / интеграционные тесты?

Насколько я могу судить, свойство Post.Comments будет отображать то же самое при обращении к нему, независимо от того, загружено оно или загружено лениво,Я не уверен, как создать тест для этого.


Редактировать: В качестве FYI, это использует механизм Code-First EF4, таким образом, мои объекты являются POCO.

1 Ответ

2 голосов
/ 17 февраля 2011

Существует вероятность, что вы сможете привести объект коллекции к более сложному типу EntityCollection, а затем проверить в нем свойство IsLoaded.

Assert.IsTrue(((EntityCollection<Comment>)Post.Comments).IsLoaded);

Если это не сработает, взгляните на ответ Роуэн на этот вопрос, который я задавал некоторое время назад. Я пытался сделать так, чтобы моя первая коллекция кода была представлена ​​как EntityCollection по другой причине.

Использование CreateSourceQuery в CTP4 Code First

...