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

Как выполнить тестирование модулей базы данных?

Я слышал, что при разработке приложения, которое использует базу данных, вы должны выполнить тестирование модулей базы данных. Каковы наилучшие методы тестирования модулей базы данных? Каковы основные проблемы при выполнении модульного тестирования db и как это сделать "правильно"?

4b9b3361

Ответ 1

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

Структура DbUnit (структура тестирования, позволяющая поместить базу данных в состояние знания и выполнить утверждение против ее содержимого) имеет тестирование базы данных страниц лучшие практики, которые, на мой взгляд, верны.

Каковы основные проблемы при тестировании модулей db

  • Создание обновленной схемы, управление изменениями схемы.
  • Настройка данных (контрольные данные, тестовые данные) и ведения данных тестирования
  • Сохранение независимых тестов
  • Разрешить разработчикам работать одновременно
  • Скорость (тесты, связанные с базой данных, обычно медленнее и сделают вашу сборку более продолжительной)

и как это сделать "правильно"?

Как намечено, следуйте известным рекомендациям и используйте специальные инструменты/рамки:

  • Предпочитайте в базе данных памяти, если это возможно (для скорости)
  • Использовать одну схему для каждого разработчика необходимо (чтобы разрешить параллельную работу)
  • Используйте средство миграции базы данных (à la RoR) для управления изменениями схемы и обновления схемы до конечной версии.
  • Сборка или использование тестового жгута, позволяющего разместить базу данных в известном состоянии перед каждым тестом и выполнять утверждения против данных после выполнения (или для запуска тестов внутри транзакции, которую вы откатываете в конце теста).

Ответ 2

Посмотрите эту ссылку. В нем рассматриваются некоторые основы создания модульного тестирования хранимых процессов на SQL Server, а также различные типы модульных тестов и их использование. Я не уверен, какие СУБД вы используете, но, очевидно, эта статья ориентирована на SQL Server.

Украденный из статьи:

Функциональные тесты

Первый и наиболее распространенный класс базы данных unit test является особенность тест. На мой взгляд, функция тесты тестируют основные функции - или API, если вы хотите, чтобы ваша база данных перспектива использования базы данных. Тестирование программируемой базы данных объекты - основной сценарий здесь. Таким образом, тестирование всех хранимых процедур, функции и триггеры внутри вашего базы данных представляют собой мой разум. Чтобы проверить хранимую процедуру, вы должны выполнить хранимую процедуру и убедитесь, что либо ожидаемый результаты были возвращены или произошло соответствующее поведение. Однако вы можете проверить больше, чем просто эти типы объектов. Ты можешь Представьте, что вы хотите, чтобы взгляд, например, вернуть соответствующие вычисление из вычисленного столбца. В виде вы можете видеть, возможности в этом область велика.

Тесты схемы

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

Тесты безопасности

Сегодня и днем ​​безопасность данных, которые хранятся в база данных имеет решающее значение. Таким образом, другой важный класс тестов модулей базы данных те, которые проверяют базу данных безопасность. Здесь вы захотите обеспечить, чтобы определенные пользователи существовали в вашей базы данных и что они назначил соответствующие разрешения. Вы часто хотите создать отрицательный тесты, которые пытаются извлечь данные из ограниченных таблиц или представлений и убедитесь, что доступ надлежащим образом отказано.

Тесты запаса данных

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

Ответ 3

Список элементов, которые следует пересмотреть и рассмотреть при просмотре с тестированием модулей базы данных

  • Каждому тестеру нужна отдельная база данных, чтобы не мешать работе другого тестера/разработчика
  • Чтобы иметь простой способ создания тестируемой базы данных (это связано с наличием базы данных SQL Server под управлением версии). Это особенно полезно при попытке найти, что пошло не так, если некоторые тесты терпят неудачу.
  • Сосредоточьтесь на конкретных областях и создайте тесты для одного модуля вместо того, чтобы покрывать все сразу. Добавление тестов гранулярно - хороший способ быть эффективным.
  • Обязательно укажите как можно больше деталей, когда тест не удастся, чтобы упростить отладку
  • Используйте одни и те же тестовые данные для всех тестов.

Если тест реализован с использованием структуры tSQLt, процесс модульного тестирования может быть сложным при работе с множеством баз данных из нескольких экземпляров SQL Server. Чтобы поддерживать, выполнять и управлять модульными тестами непосредственно из SQL Server Management Studio, ApexSQL Unit Test может использоваться как решение

Ответ 4

Я рад, что вы спросили об модульном тестировании, а не вообще тестировании.

Базы данных имеют множество функций, которые необходимо протестировать. Некоторые примеры:

  • Типы данных/размер/набор символов (попробуйте вставить шведское имя или длинные URL-адреса или цифры из реальных миров и посмотрите, хорошо ли определены ваши определения столбцов)
  • Триггеры
  • Противоположности (внешние ключи, уникальность...)
  • Представления (убедитесь, что данные правильно включены/исключены/преобразованы)
  • Сохраненные процедуры
  • UDFs
  • Права доступа
  • ...

Это полезно не только при изменении чего-либо в вашей базе данных, но также при обновлении ваших dbms или изменении чего-либо в ваших настройках.

Как правило, выполняется тестирование интеграции. Это означает, что создан тестовый пакет на языке программирования, например PHP или Java, и тесты вызывают некоторые запросы. Но если что-то не удается или есть некоторые исключения, сложнее понять проблему по двум причинам:

  • Проблема может быть в вашем PHP-коде или в конфигурации PHP или в сети, или...
  • Операторы SQL труднее читать и изменять, если они встроены в другой язык программирования.

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

Ответ 5

Я использую junit/nunit/etc и код для тестирования модулей базы данных с помощью java или С#. Затем они могут запускаться на сервере интеграции, возможно, используя отдельную схему для тестовой базы данных.

Последний разработчик sql-сервера Oracle имеет встроенную модульную систему тестирования. Я изучил это, но использовал бы НЕ. Он использует графический интерфейс для создания и запуска тестов и хранения всех тестов в базе данных, поэтому не так просто поставить тестовые примеры под контроль версий. Есть, вероятно, другие рамки тестирования, я полагаю, они могут быть специфическими для вашей базы данных.

Хорошая практика похожа на обычные модульные тесты:

  • поставить тесты под контролем источника
  • сделать тесты, которые выполняются быстро - не тестируйте слишком много сразу
  • сделайте свои тесты воспроизводимая

Ответ 6

Взгляните на структуру DBTestDriven. Он отлично работает для нас. Загрузите его из GitHub или их веб-сайта.

Ответ 7

Что касается разработки JVM, модульные тесты могут извлечь выгоду из абстрактного JDBC: как только вы узнаете, какие данные JDBC повышены путем доступа к БД, эти данные JDBC можно "переиграть".

Таким образом, случай доступа к БД может быть "воспроизведен" для тестирования без целевой БД: нет сложности тестирования/изоляции данных, упростить непрерывную интеграцию.

Acolyte - это полезная структура таким образом (включая инструмент Studio GUI для записи "результата DB" ): https://github.com/cchantep/acolyte