Должен ли я использовать базу данных в памяти вместо того, чтобы копировать мои репозитории?

Мне нравится идея использовать базу данных в памяти, такую ​​как SQLite, при тестировании вместо создания Mocks для моих репозиториев. Таким образом, я также могу протестировать код моих репозиториев без проблем с производительностью.

Каковы плюсы и минусы этой стратегии?

3 ответа

Решение

Я бы сказал, что эти две стратегии - две разные вещи. Как вы сами сказали, с помощью in-memory db вы также можете тестировать свои репозитории, однако сначала вы должны протестировать свои репозитории, чтобы достичь разделения проблем. Когда вы проектируете свою систему, может быть, в соответствии с MVC, вы хотите, чтобы ваши контроллеры были перед моделями / репозиториями, потому что сначала вы должны решить, что вы хотите сделать, и после этого решить, какие объекты будут совместно достигать этой цели. Поэтому, возможно, лучше сначала создать контроллеры и макетные репозитории, а затем вы можете протестировать свои репозитории, используя базу данных в памяти, если ее действительно легко настроить.

Если я использую ORM, я обычно склоняюсь к использованию базы данных sqlite в памяти для тестирования своих приложений, поскольку у меня нет накладных расходов на настройку макетов и ожидаемых результатов. Есть увеличение скорости по сравнению с использованием фиктивной базы данных, но я не ожидаю, что она будет быстрее, чем при использовании макета. Если бы я использовал адаптер SQL, я бы, вероятно, использовал макет, поскольку в противном случае мне, вероятно, пришлось бы переписывать вызовы.

Моя стратегия заключается в том, чтобы при тестировании моего бизнес-кода я копировал свой репозиторий. При тестировании моего хранилища я делаю макет своего слоя доступа к данным. Я использую, насколько это возможно, автоматически сгенерированный код для своего уровня доступа к данным (LINQ-to-SQL), поэтому тестировать там особо нечего. То, что есть (валидация, специализированная обработка свойств), обычно может быть проверено напрямую, без насмешек. Если это абсолютно необходимо (или проще), я иногда подделываю слой данных с помощью специального хранилища в памяти, созданного на основе списков - см. Мой блог по адресу http://farm-fresh-code.blogspot.com/ где я писал о этот.

Использование in-memory дает вам преимущество, которого нет в насмешках. Используя базу данных в памяти, вы можете легко изменить реализацию кода, ничего не меняя в тестах. Например, при использовании ORM вы можете переместить форму, используя insert способ bulkInsert метод без необходимости имитировать недавно добавленный bulkInsert метод.

Другие вопросы по тегам