Вопрос

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

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

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

Нет правильного решения

Другие советы

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top