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