Хочу рассмореть тему влияния модульного тестирования на дизайн php кода

syfisher

TDD infected!!
Хочу рассмореть тему влияния модульного тестирования на дизайн php кода

Есть идея рассмотреть влияние модульного тестировани на дизайн php кода. Как будут развиваться классы при попытке написать для них тесты, какие методы будут полезными при тестировании. Плюс также как писать те или иные тесты в различных случаях. Свои посты я планирую помещать в раздел для продвинутых. Сообщения будут представлены не как вопросы, а как готовое суждение, которые можно обсуждать, критиковать и т.д. На основе обсуждений, возможно, будет парочку статей в журнале.

Вот приблизительный список того, что хотелось бы обсудить.

1) Тестирование методов с SQL кодом плюс тестирование реальных запросов к базе данных. Вопросы скорости выполения тестов, начальных данных и т.д.
2) Тестирование делегирования. Использование MockObject. Вопросы целесообразности, степени подробности тестов. Сюда возможно войдет роль интерфейсов в тестировании.
3) Использование констант в коде, который нужно тестировать.
4) Тестирование объектов в нижних уровнях иерархии. Как эмулировать поведение родительских объектов. Каким образом должны быть написаны родительские классы, для того, чтобы было легко тестировать дочерние.
5) Документирование и тесты. Горячая будет тема. Возможно, что я ее опущу - слишком много политики. Не хочу, чтобы получилась перебранка.
6) Организация среды тестирования, организация тестов и проч.

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

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

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

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

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

В своех сообщениях будут использовать цитаты из Фаулера, Мартина и некоторые коды из LIMB.

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

confguru

ExAdmin
Команда форума
syfisher

Тема актуальная. Только нужны рабочие и понятные все примеры - с показательными ошибками.
 

syfisher

TDD infected!!
Примеры есть. Достаточно сложно будет подготовить примеры в развитии. То есть был плохой код, начали тестировать, получаем другой код, более качественный. Буду стараться. Результат зависит от количества времени, которое удастся уделить. Каникулы на Н.Г. будут весьма кстати...

Еще одну тему придумал по ходу: тестирование стратегий LazyLoading. Надо будет обязательно коснуться проблем, которые возникают, когда LazyLoading требует вызовов системых функций.
 
Было бы интересно увидеть все это в виде цикла статей, включающих и вступительную.
 

slach

Новичок
тема действительно АКТУАЛЬНАЯ, на русском языке, подобных материалов с примерами на PHP ... я пока не видел...

IMHO для многих задач юниттесты и phpUNIT из PEAR в частности ... не подходят...
но поглядеть как именно народ использует данный подход, очень хочется
 

syfisher

TDD infected!!
тема действительно АКТУАЛЬНАЯ, на русском языке, подобных материалов с примерами на PHP ... я пока не видел...
Поэтому и хочу поднять эту тему. Сам учился буквально мизерными шагами, что называется наощуп.

Было бы интересно увидеть все это в виде цикла статей, включающих и вступительную
Обязательно будет цикл статей после того, как соответствующая тема будет рассмотрена на данном форуме. После этого переработанное сообщение пойдет в спец. подсайт на limb-project.com. Планируется также перевод на англ.

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

IMHO для многих задач юниттесты и phpUNIT из PEAR в частности ... не подходят...
Мы используем simpletest. Он поддерживаем MockObject и прочие полезные при тестировании фичи. Плюс мы немного подделали simpletest для того, чтобы можно было тесты организовывать в дерево, что очень удобно. Код будет выложен позже, если pacha согласится.
 

ONK

Пассивист PHPСluba
Объясните мне, как можно протестировать работу метода, отвечающего, к примеру, за сохранение информации в базе данных. Добавлю что метод требует наличия предварительно созданных глобальных объектов, работа метода может носить односторонний характер, и восстановление базы данных до прежнего состояния (до произведения теста), может потребовать написания процедуры сравнимой по сложности с самим тестируемым методам.
Соответственно встаёт вопрос сопровождения теста в соотвестствии с изменением работы метода. В итоге легко прогнозируется тройное усложнение написания и сопровождения проекта.
 

syfisher

TDD infected!!
Автор оригинала: ONK
Объясните мне, как можно протестировать работу метода, отвечающего, к примеру, за сохранение информации в базе данных. Добавлю что метод требует наличия предварительно созданных глобальных объектов, работа метода может носить односторонний характер, и восстановление базы данных до прежнего состояния (до произведения теста), может потребовать написания процедуры сравнимой по сложности с самим тестируемым методам.
Соответственно встаёт вопрос сопровождения теста в соотвестствии с изменением работы метода. В итоге легко прогнозируется тройное усложнение написания и сопровождения проекта.
Очень классный usecase. Его мы обязательно рассмотрим в теме тестирования кода, связанного с реальными запросами к базе данных. Я постараюсь описать то, к чему мы сами пришли. Если других заявок больше не будет, то данная тема будет первой, ок?
 

[DAN]

Старожил PHPClub
ONK
>как можно протестировать работу метода, отвечающего, к примеру, за сохранение информации в базе данных

Можно использовать транзакции. В конце теста просто делается rollback, и результат теста на БД не отражается. Имхо, дешевый и простой подход.
 

vitus

мимо проходил
[DAN]
особенно данный способ подходит для мойсклы, которая транзакций не поддерживает...

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

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

si

Administrator
соответственно на хостинге это затруднительно, в локалке тест может быть неадекватным, как справедливо заметил Фанат
не про benchmarks идет разговор, а про TDD - Test Driven Development
 

syfisher

TDD infected!!
Действительно тесты работы с базой данных вести на хостинге с рабочей базой данный не рекомендуется.... Даже если пользователь транзакциями.
 
Сверху