У кого-нибудь есть опыт использования SQLite для написания интеграционных тестов? - PullRequest
2 голосов
/ 05 августа 2011

Мы используем MVC, Entity Framework 4.1 Code First, SQL Server в нашем проекте.

Пожалуйста, поделитесь своим опытом: как вы проводите модульное тестирование уровня обслуживания данных?Под уровнем обслуживания данных я подразумеваю службы, которые должны запускаться контроллерами MVC, которые имеют своего рода объявление производного класса DbContext внутри, так что они зависят от этого EF DbContext и инкапсулируют некоторую логику бизнес-данных для выборки и хранения данных.

После прочтения нескольких статей и постов я склоняюсь использовать отдельную базу данных для построения модульных / интеграционных тестов и предпочитаю использовать оперативную память (например, SQLite), а не SQL Compact.Однако я даже не уверен, если это возможно, если у вас есть такой опыт, пожалуйста, поделитесь несколькими строками кода, чтобы показать, как вы этого добиваетесь.

Ответы [ 2 ]

5 голосов
/ 05 августа 2011

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

Я написал несколько ответов о модульном тестировании / интеграционном тестировании кода, зависящего от EF. Последний - здесь . Поэтому, если ваш сервисный уровень создает запросы linq для контекста, вы не можете надежно выполнить их модульное тестирование. Вам нужны интеграционные тесты.

Я бы использовал ту же базу данных, которую вы ожидаете использовать в вашем реальном коде. Зачем? Поскольку отображение и поведение между базами данных могут отличаться, а также реализация LINQ. Также в случае сервера SQL вы можете использовать специальные функции EF , которые не обязательно должны быть доступны в SQLite. Другая причина в том, что в прошлый раз, когда я проверял это, поставщик SQLite не поддерживал удаление баз данных, воссоздание и т. Д., Что люди обычно хотят использовать для интеграционных тестов. Решением для этого может быть Деварт провайдер .

1 голос
/ 05 августа 2011

Я не использую отдельную базу данных вообще. На самом деле мои юнит-тесты вообще не используют базу данных.

Моя стратегия заключается в создании интерфейсов IEnityRepository для сущностей БД (замените сущность фактическим именем). Затем я передаю их конструктору для моих контроллеров.

Во время модульного тестирования я просто использую библиотеку Mocking для прохождения имитационных реализаций необходимых мне репозиториев и возвращаю некоторый набор известных данных, которые я могу использовать в модульных тестах.

...