Доброго здоровья!<br><br><div class="gmail_quote">23 февраля 2010 г. 7:36 пользователь Иван Бессарабов <span dir="ltr">&lt;<a href="mailto:ivan@bessarabov.ru">ivan@bessarabov.ru</a>&gt;</span> написал:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
Хочу все-таки научится по умному писать тесты.<br>
<br>
Вот есть у меня веб приложение, оно активно взаимодействует с базой<br>
данных. Хочу все это обложить тестами.<br>
Сейчас делаю так:<br>
 1. приложение это крутится на тестовом сервере<br>
 2. есть файл project.conf где прописаны данные для подключения к базе данных<br>
 3. создал тестовую базу, забил в нее тестове значения и сохранил dump<br>
 4. в файлах t/*.t есть некоторое количество тестов<br>
 5. написал скрипт <a href="http://test_it.pl" target="_blank">test_it.pl</a> который: а) создает тестовую базу из<br>
dump-а б) заменяет конфиг файл на файл с данными для подключения для<br>
тестовой базы в) прогоняет все тесты и отображает их вывод г)<br>
возвращает конфиг обратно<br>
<br>
Это все работает, но я уверен, что можно сделать лучше.<br>
<br>
Расскажите, пожалуйста, о вашем опыте тестирования.<br>
<br>
Спасибо.<br>
<font color="#888888">--<br>
Moscow.pm mailing list<br>
<a href="mailto:moscow-pm@pm.org">moscow-pm@pm.org</a> | <a href="http://moscow.pm.org" target="_blank">http://moscow.pm.org</a><br>
</font></blockquote></div><br>Как сделано у нас.<br>
<br>
Сразу хочу сказать, что работаем с несколькими базами (около десятка
или двух), практически каждая имеет кучу реплик (основная база содержит
более сотни реплик).<br>
<br>
Итак.<br>
Есть свой фреймворк, который создаёт dataset. Этот dataset сохраняется
как perl-script, содержащий информацию о том из каких баз и каких
таблиц записи с какими ключами нужно использовать, чтобы запустить
тест. Естественно, один и тот же dataset может использоваться во многих
тестах, равно как и несколько dataset&#39;ов в одном тесте.<br>
<br>
В начале теста пишется что-то типа:<br>
<br>
<font face="courier new,monospace">use Our::Framework::Test::DataSet;<br>
<br>
require_data(&#39;path/to/data/sets&#39;);<br>
</font><br>
А дальше сам тест.<br>
<br>
Само собой, эти тесты не покрывают ORM. ORM, точнее, то, что было переписано из ORM, тестируется по-другому.<br>
<br>
Что делает фреймворк?<br>
1. Создаёт таблицы в соответсвующих тестовых базах такие же, как и в
продакшне. Как я уже говорил, баз несколько, для каждой есть своя
пустая тестовая. Или даже несколько, потому что тесты иногда запускаются параллельно.<br>
2. Наполняет данными из продакшн базы.<br>
3. и всё. :)<br>
<br>
Ну, может ещё очищать базу перед запуском теста и некоторые другие функции, нужные для подготовки базы к тестированию.<br>
<br>
Но у нас не совсем типичное приложение, точнее, совсем нетипичное.
Многие решения очень специфические и вряд ли могут быть применимы
где-то ещё.<br clear="all"><br>-- <br>Andrei Protasovitski<br>&lt; andrei[dot]protasovitski[at]gmail[dot]com &gt;<br>Diemen, Netherlands<br>