В зависимости от того, что именно вы пытаетесь проверить, могут быть разные подходы.
Если вы хотите проверить логику доступа к данным, то это уже не модульный тест, а интеграционный тест.Для такого рода тестов было бы неплохо иметь возможность легко заменить реальную базу данных более легкой, может быть, даже базой данных в памяти, такой как SQLite, которая будет реконструирована перед выполнением каждого теста.Если вы используете ORM, эта задача проста.Все, что вам нужно сделать, это сгенерировать сценарии SQL (INSERT INTO ...) из существующей базы данных, изменить и адаптировать диалект к SQLite (при необходимости), прочитать и внедрить в файл SQLite, и, наконец, все, что осталось, это проинструктировать вашслой доступа к данным для использования диалекта SQLite и строки соединения для модульного теста.
Теперь, если вы не используете ORM и ваша логика доступа к данным связана с MSSQL, все становится еще хуже, вам потребуется живая база данных, чтобывыполнить эти интеграционные тесты.В этом случае я бы посоветовал вам дублировать вашу реальную базу данных, которую вы использовали бы для тестов, изменив только строку подключения.Еще раз вам потребуется правильно setup
и teardown
(предпочтительно в транзакции) этой тестовой базы данных, чтобы перевести ее в известное состояние для тестов.
Если вы хотите протестировать код, который зависитв этих репозиториях (таких как, например, ваши контроллеры) вам даже не нужно беспокоиться о том, чтобы манипулировать данными, так как ваши контроллеры зависят от абстрактных репозиториев, а не от реальных реализаций (не так ли), так что вы можете легко насмехаться над методамихранилище для проверки логики в контроллерах.