Как бы я тестировал логику базы данных?

12

У меня все еще есть проблема преодоления небольшой проблемы, когда дело доходит до TDD.

Мне нужен метод, который будет получать определенный набор записей отфильтрованных данных из уровня данных (linq2SQL). Обратите внимание, что я использую сгенерированные linq классы, сгенерированные из DBML. Теперь проблема в том, что я хочу написать тест для этого.

сделать я:

а) сначала вставьте записи в тест, а затем выполните метод и проверьте результаты

б) использовать данные, которые могут быть в базе данных. Не увлекаться этой логикой, потому что это может привести к поломке.

в) что вы предлагаете?

Neale
источник

Ответы:

7

Вариация на (а).

Иметь тестовую базу данных или подраздел базы данных, который можно использовать для тестирования. Когда вы настраиваете свои тесты, имейте подпрограмму, которая инициализирует БД так, как вам нужно, чтобы начать тестирование (это может быть сделано перед каждым тестом, в зависимости от ситуации). Это может включать удаление данных, вставку данных и т. Д. Затем запустите свои тесты. В фазе разрыва, убери за собой. Может повторяться столько, сколько необходимо, без риска нарушения работоспособности системы (не рекомендуется проверять данные в базе данных, которые нужны для чего-либо еще).

Яаков Эллис
источник
1
Хороший ответ. Мне нравится создавать одноразовые базы данных с использованием sqlite. Это невозможно, если вы хотите протестировать вещи, характерные для реализации базы данных (например, триггеры), но это позволяет быстро и безболезненно устанавливать / отключать.
Богеймин
1
@bogeymin - вы все равно можете настроить тестовую БД с триггерами, если хотите (вы можете создать всю БД с помощью скрипта во время FixtureSetup)
Яаков Эллис