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

Вы можете использовать Array.prototype.sort с простой функцией sort, в которой вы анализируете значение title каждого объекта в массиве как int и сравниваете. Примерно так:

var arr = [{
    "title": "1-Introduction"
  },
  {
    "title": "5-Introduction"
  },
  {
    "title": "20-Introduction"
  },
  {
    "title": "4-Introduction"
  }
];


arr.sort(function(a, b) {
  const aVal = parseInt(a.title.split("-")[0]);
  const bVal = parseInt(b.title.split("-")[0]);
  return aVal - bVal;
});

console.log(arr);

9
задан Steven Raybell 3 November 2008 в 23:36
поделиться

8 ответов

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

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

Существует несколько инструментов там для помощи Вам с этим. DbUnit является одним из них, и я также полагаю, что Microsoft имела инструмент Visual Studio for Database Professionals, который содержал некоторую поддержку тестирования DB.

3
ответ дан 4 December 2019 в 20:25
поделиться

Вот некоторые инструкции:

  1. Используйте изолированную базу данных для поблочного тестирования (например, Никакие другие тестовые прогоны или действие)
  2. Всегда вставляйте все данные тестирования, которые Вы намереваетесь запросить в том же тесте
  3. Запишите, что тесты для случайного создания различных объемов данных, например, случайного числа вставок говорят между 1 и 10 строками
  4. Рандомизируйте данные, например, для булева поля случайная вставка и TRUE или FALSE
  5. Проведите подсчет в тесте переменных (например, количество строк, количество trues)
  6. Поскольку Утверждение выполняет запрос и выдерживает сравнение с локальными тестовыми переменными
  7. Используйте транзакции Enterprises Services для откатывания базы данных к предыдущему состоянию

Посмотрите ссылку ниже для метода Транзакции Enterprises Services:

http://weblogs.asp.net/rosherove/articles/DbUnitTesting.aspx

3
ответ дан 4 December 2019 в 20:25
поделиться

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

Эти вызовы синхронизированы, чтобы гарантировать что:

1/Они не занимают слишком много времени.

2/Они не отличаются дико (плохим способом) с предыдущей ночи.

Таким образом мы ловим ошибочные запросы, или DB изменяется быстро.

1
ответ дан 4 December 2019 в 20:25
поделиться

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

1
ответ дан 4 December 2019 в 20:25
поделиться

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

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

Мы можем затем протестировать несколько различных сценариев на том же DB (один за другим), и мы никогда не штампуем на другом пальцы ног тестеров.

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

1
ответ дан 4 December 2019 в 20:25
поделиться

SQLServerCentral имеет статью здесь (Вам, вероятно, придется зарегистрироваться, но это свободно и без строк) о Платформе Поблочного тестирования TSQL, названной tsqlUnit. Это - открытый исходный код и следует вперед в традиции xUnit платформы.

Это следует за МЕСТОМ шаблон TDD:

Установка - готовит условия испытания путем управления объектами, таблицами и/или данными

Осуществление - вызывает производственный код

Утверждайте - проверяют, что фактический результат равняется ожидаемому результату

Разрушение - возвращает все назад способу, которым это было перед запущенным тестом. Это на самом деле сделано путем Отката транзакции, которая сохраняет все хорошим и опрятным.

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

Платформа может быть загружена здесь.

1
ответ дан 4 December 2019 в 20:25
поделиться

Django предлагает возможность модульного теста базы данных. Можно одолжить их дизайнерские идеи и воспроизвести его в других средах.

Люди Django предлагают подкласс стандарта Python unittest TestCase класс, который заполняет базу данных с известным приспособлением - известный набор строк данных.

В случае Django (и Python) является самым легким заполнить базу данных из извлечения данных JSON. Другие форматы файлов для приспособления могут использоваться для других платформ. Например, если Вы работаете в Oracle, Вы могли бы найти файлы CSV легче работать с.

Это TestCase подкласс позволяет писать типично выглядящий TestCase, который осуществляет базу данных с известным приспособлением данных.

Кроме того, исполнитель тестов Django создает временную схему в тестовых целях. Это легко для Django, потому что у них есть полный объектно-реляционный компонент управления, который включает создание DDL. Если Вы не будете иметь это в наличии, то Вам все еще будет нужен сценарий DDL, таким образом, можно будет создать и избавиться от тестовой схемы в unittest целях.

1
ответ дан 4 December 2019 в 20:25
поделиться

Я нахожу полезным протестировать SQL, отправляемый вниз в базу данных, а не результат запросов базы данных.

Не то, чтобы я не делаю позже, но я нахожу, что он намного быстрее тестирует на это, чем наличие базы данных слишком много подъема.

0
ответ дан 4 December 2019 в 20:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: