Как проверить веб-код? - PullRequest
       23

Как проверить веб-код?

12 голосов
/ 06 августа 2008

Есть ли у кого-нибудь хорошие советы для написания тестового кода для серверной разработки базы данных, где существует сильная зависимость от состояния?

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

Люди обычно создают отдельную систему разработки с «замороженной» базой данных, чтобы любая заданная функция всегда возвращала один и тот же набор результатов?

Я совершенно уверен, что это не новая проблема, поэтому мне было бы очень интересно поучиться на опыте других людей.

Существуют ли хорошие статьи, в которых обсуждается эта проблема веб-разработки в целом?

Я обычно пишу код PHP, но я ожидаю, что все эти проблемы в значительной степени не зависят от языка и инфраструктуры.

Ответы [ 10 ]

5 голосов
/ 06 августа 2008

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

Обновление: быстрый поиск в Google показал расширение блока БД для PHPUnit.

3 голосов
/ 06 августа 2008

Если вас больше всего интересует тестирование на уровне данных, вы можете обратиться к этой книге: xUnit Test Patterns: рефакторинг кода теста . Я всегда был в этом не уверен, но эта книга прекрасно помогает перечислить такие проблемы, как производительность, воспроизводимость и т. Д.

2 голосов
/ 10 сентября 2008

Мы используем базу данных в памяти (hsql: http://hsqldb.org/). Hibernate (http://www.hibernate.org/)), что позволяет нам направлять наши модульные тесты на базу данных тестирования с дополнительным бонусом, который они запускают как быстро, как молния ..

2 голосов
/ 06 августа 2008

Полагаю, это зависит от того, какую базу данных вы используете, но Red Gate (www.red-gate.com) создает инструмент под названием SQL Data Generator. Это может быть настроено так, чтобы заполнить базу данных осмысленными тестовыми данными. Вы также можете указать ему всегда использовать одно и то же начальное число в генераторе случайных чисел, чтобы ваши «случайные» данные всегда были одинаковыми.

Затем вы можете написать свои модульные тесты, чтобы использовать эти надежные, воспроизводимые данные.

Что касается тестирования веб-сайтов, я сейчас изучаю Selenium (selenium.openqa.org). Похоже, что это набор тестов с поддержкой разных браузеров, который поможет вам проверить функциональность. Однако, как и во всех этих инструментах для тестирования веб-сайтов, нет реального способа проверить, насколько хорошо эти вещи выглядят во всех браузерах, не бросая на них глаз человека!

1 голос
/ 10 сентября 2008

В целом я согласен с Питером, но для создания и удаления тестовых данных я бы не использовал SQL напрямую. Я предпочитаю использовать некоторый CRUD API, который используется в продукте, для создания данных, максимально похожих на производственные ...

1 голос
/ 19 августа 2008

Я бы предложил использовать три базы данных. Одна производственная база данных, одна база данных разработки (заполненная некоторыми значимыми данными для каждого разработчика) и одна база данных тестирования (с пустыми таблицами и, возможно, несколькими строками, которые всегда необходимы).

Способ проверки кода базы данных:

  1. Вставить несколько строк (используя SQL) для инициализации состояния
  2. Запустите функцию, которую вы хотите проверить
  3. Сравните ожидаемые результаты с реальными. Здесь вы можете использовать вашу обычную систему модульного тестирования
  4. Очистить строки, которые были изменены (чтобы следующий прогон не видел предыдущий прогон)

Очистка может быть выполнена стандартным способом (конечно, только в тестовой базе данных) с DELETE * FROM table.

1 голос
/ 11 августа 2008

Вот моя стратегия (я использую JUnit, но я уверен, что есть способ сделать эквивалент в PHP):

У меня есть метод, который выполняется перед всеми модульными тестами для определенного класса DAO. Он переводит базу данных dev в известное состояние (добавляет все тестовые данные и т. Д.). Выполняя тесты, я отслеживаю любые данные, добавленные в известное состояние. Эти данные очищаются в конце каждого теста. После выполнения всех тестов для класса другой метод удаляет все тестовые данные в базе данных dev, оставляя их в том состоянии, в котором они находились до запуска тестов. Все это немного трудоемко, но я обычно пишу методы в классе DBTestCommon, где все мои тестовые классы DAO могут получить к ним доступ.

1 голос
/ 06 августа 2008

Вы можете попробовать http://selenium.openqa.org/, это больше для тестирования GUI, чем для приложения тестирования уровня данных, но записывает ваши действия, которые затем могут быть воспроизведены для автоматизации тестирования на разных платформах.

1 голос
/ 06 августа 2008

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

Затем вы можете использовать что-то вроде Selenium для простого тестирования из вашего пользовательского интерфейса (при условии, что здесь есть веб-интерфейс, но существует множество инструментов тестирования пользовательского интерфейса для других разновидностей пользовательского интерфейса) и обнаружения наличия определенных записей, извлеченных из база данных.

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

1 голос
/ 06 августа 2008

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...