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

StackOverflow https://stackoverflow.com/questions/3772093

Вопрос

Я слышал, что при разработке приложения, который использует базу данных, которую вы должны выполнять тестирование блока базы данных. Каковы лучшие практики в тестировании баз данных? Каковы основные проблемы при выполнении тестирования единицы БД и как это сделать «правильно»?

Это было полезно?

Решение

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

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

Каковы основные проблемы при выполнении тестирования единицы БД

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

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

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

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

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

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

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

Если тест реализован с использованием Framework TSQLT, процесс тестирования устройства может быть сложен при работе с большим количеством баз данных из нескольких экземпляров SQL Server. Для того, чтобы поддерживать, выполнить и управлять тестами подразделения непосредственно из студии управления SQL Server, APEXSQL Блок теста Может использоваться в качестве решения

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

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

Тесты на функциях

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

Тесты схемы

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

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

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

Тесты данных-данных

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

Я рад, что вы спросили о тестировании подразделения, а не тестирование в целом.

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

  • Типы данных / размер / наборы размеров / символов
  • Триггеры
  • Повышения (иностранные ключи, уникальность ...)
  • Представления (убедитесь, что данные правильно включены / исключены / преобразованы)
  • Хранимые процедуры
  • UDFS.
  • Разрешения
  • ...

Это полезно не только при изменении чего-либо в вашу базу данных, но и при обновлении вашей СУБД или измените что-то в настройках.

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

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

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

Я использую JUNIT / NUNIT / ETC и кодовые тесты блока базы данных с Java или C #. Затем они могут работать на сервере интеграции, возможно, используя отдельную схему в тестовую базу данных.

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

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

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

Посмотрите на DBTESTDRIVED Framework. Это отлично работает для нас. Скачайте его из GitHub или их сайта.

Что касается разработки JVM, тесты единиц могут извлечь выгоду из абстракции JDBC: как только вы знаете, какие данные JDBC поднимаются домом DB, эти данные JDBC могут быть «воспроизведены».

При этом корпус доступа DB может быть «воспроизведен» для тестирования, без целевого DB: нет сложности изоляции тестов / данных, легкость непрерывной интеграции.

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

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