Подтвердить что ты не робот

Тестирование данных

Какова наилучшая практика тестирования API, которая зависит от данных из базы данных? Какие проблемы я должен отслеживать в среде "Непрерывная интеграция", которая запускает Unit Tests в рамках процесса сборки? Я хотел бы развернуть вашу базу данных как часть скриптов сборки (может запуститься ваш установщик), или я должен идти за жестко закодированными данными [использовать MSTest Data Driven Unit Tests with XML]?

Я понимаю, что могу издеваться над слоем данных для уровня Business Logic, но что, если у меня возникли проблемы с SQL-операциями в DAL? Мне нужно попасть в базу данных, верно?

Ну... что поток вопросов:)... Мысли?

4b9b3361

Ответ 1

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

И, конечно, никогда не тестируйте свою живую базу данных! Но это само собой разумеется:)

Ответ 2

Как уже упоминалось, используйте издевательство, чтобы имитировать вызовы БД в модульных тестах, если вы не хотите бесконечно возиться со своими тестами и данными. Тестирование SQL-запросов подразумевает более интеграционный тест. Запустите это отдельно от модульных тестов, они - два разных зверя.

Ответ 3

Это хорошая идея, чтобы автоматически стереть тестовую базу данных, а затем заполнить ее данными тестовой жгуты, которые предполагается использовать для всех тестов, которые необходимо подключить к базе данных. База данных должна быть reset перед каждым тестом для правильной изоляции - неудачный тест, который помещает плохие данные, может вызвать ложные сбои в последующих тестах, и он становится беспорядочным, если вам нужно запускать тесты в определенном порядке для получения согласованных результатов.

Вы можете очистить и заполнить базу данных инструментами (DBUnit, DBUnit.NET, другие) или просто создайте собственные классы служебных программ, чтобы сделать то же самое.

Как вы сказали, другие слои должны быть достаточно развязаны из классов, которые действительно попадают в базу данных, поэтому необходимость в какой-либо базе данных, участвующей в тестировании, ограничивается испытаниями, выполняющими небольшое подмножество вашей кодовой базы. Ваши базы данных, обращающиеся к компонентам, могут быть издевательски/заглушены для всего, что от них зависит.

Ответ 4

Одна вещь, которую я сделал, - создать статические методы, которые возвращают данные теста известного состояния. Затем я использовал бы "поддельный" DAL, чтобы возвращать эти данные, как если бы я действительно вызывал базу данных. Что касается тестирования sql/хранимой процедуры, я протестировал ее с помощью SQL Management Studio. YMMV!