Доброго здоровья! 23 февраля 2010 г. 7:36 пользователь Иван Бессарабов <[email protected]>написал:
> Хочу все-таки научится по умному писать тесты. > > Вот есть у меня веб приложение, оно активно взаимодействует с базой > данных. Хочу все это обложить тестами. > Сейчас делаю так: > 1. приложение это крутится на тестовом сервере > 2. есть файл project.conf где прописаны данные для подключения к базе > данных > 3. создал тестовую базу, забил в нее тестове значения и сохранил dump > 4. в файлах t/*.t есть некоторое количество тестов > 5. написал скрипт test_it.pl который: а) создает тестовую базу из > dump-а б) заменяет конфиг файл на файл с данными для подключения для > тестовой базы в) прогоняет все тесты и отображает их вывод г) > возвращает конфиг обратно > > Это все работает, но я уверен, что можно сделать лучше. > > Расскажите, пожалуйста, о вашем опыте тестирования. > > Спасибо. > -- > Moscow.pm mailing list > [email protected] | http://moscow.pm.org > Как сделано у нас. Сразу хочу сказать, что работаем с несколькими базами (около десятка или двух), практически каждая имеет кучу реплик (основная база содержит более сотни реплик). Итак. Есть свой фреймворк, который создаёт dataset. Этот dataset сохраняется как perl-script, содержащий информацию о том из каких баз и каких таблиц записи с какими ключами нужно использовать, чтобы запустить тест. Естественно, один и тот же dataset может использоваться во многих тестах, равно как и несколько dataset'ов в одном тесте. В начале теста пишется что-то типа: use Our::Framework::Test::DataSet; require_data('path/to/data/sets'); А дальше сам тест. Само собой, эти тесты не покрывают ORM. ORM, точнее, то, что было переписано из ORM, тестируется по-другому. Что делает фреймворк? 1. Создаёт таблицы в соответсвующих тестовых базах такие же, как и в продакшне. Как я уже говорил, баз несколько, для каждой есть своя пустая тестовая. Или даже несколько, потому что тесты иногда запускаются параллельно. 2. Наполняет данными из продакшн базы. 3. и всё. :) Ну, может ещё очищать базу перед запуском теста и некоторые другие функции, нужные для подготовки базы к тестированию. Но у нас не совсем типичное приложение, точнее, совсем нетипичное. Многие решения очень специфические и вряд ли могут быть применимы где-то ещё. -- Andrei Protasovitski < andrei[dot]protasovitski[at]gmail[dot]com > Diemen, Netherlands
-- Moscow.pm mailing list [email protected] | http://moscow.pm.org
