Разработка через тестирование на PHP

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

Я хотел бы начать использовать TDD в новых проектах, но не знаю, с чего начать.

Какие у вас есть рекомендации по фреймворку модульного тестирования на основе PHP и какие полезные ресурсы можно найти для тех, кто плохо знаком с концепцией TDD?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
44
0
16 689
8
Перейти к ответу Данный вопрос помечен как решенный

Ответы 8

Вы должны изучить PHPUnit, он очень похож на nUnit.

Ответ принят как подходящий

Я использовал как PHPUnit, так и SimpleTest, и обнаружил, что SimpleTest проще в использовании.

Что касается TDD, мне не повезло с ним в чистом виде. Я думаю, что это в основном вопрос времени / дисциплины с моей стороны.

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

SimpleTest - отличная система. Я начал с этого около 5 месяцев назад, никогда не слышал о TDD, и SimpleTest прост в освоении, но все еще эффективен. Что касается ресурсов, я сейчас читаю TDD на примере Кента Бека, и это хорошо.

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

И чтобы ответить на ваш вопрос о TDD - я не уверен, что TDD широко используется в пространстве PHP. Я вижу, что быстрая разработка приложений и TDD несколько противоречат друг другу (строго ИМХО). TDD требует, чтобы у вас была полная картина того, что вы создаете, и вы пишете тесты заранее, а затем реализуете код, чтобы пройти тест.

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

как давно кто-то -1 это делал?

mraaroncruz 16.08.2011 02:35

Кстати, это №2 в goog для «tdd in php» и №1 для «tdd php»!

mraaroncruz 16.08.2011 02:36

Понятия не имею, почему это -1. Однако я придерживаюсь своего мнения. Я хочу сказать, что я почти не использую TDD для быстрых прототипов, но я почти всегда (80-90% времени) TDD в противном случае. Еще мне нравится phpt. Не уверен, почему это плохо. Хотя PHPUnit имеет свои преимущества, это все еще сложная структура.

Till 18.08.2011 02:44

Я думаю, что важно оставить его как -1 выше, но это не остановит меня в комментариях!

mraaroncruz 18.08.2011 15:05

Hab keine Ahnung wovon Du sprichst.

Till 20.08.2011 07:44

Однажды мы обсуждали, почему вам понравился Typo3. Вы сказали: «У него есть встроенный CI-сервер». Потом я случайно наткнулся на это и узнал ваше имя. Потом пошел: P Может иронично. Но не так, как Аланис Мориссетт. По-настоящему. Люстиг, одер? И еще один!

mraaroncruz 23.08.2011 14:19

Мне нравится Typo3? Не уверен, что я когда-либо говорил это, поскольку верно обратное. Как правило, я полностью поддерживаю проекты, которые включают в себя набор тестов и используют непрерывную интеграцию (CI). Например. PHP SDK Amazon для AWS предположительно имеет набор тестов, но он не распространяется с кодом. Я думаю, что людям будет сложнее работать с ним и расширять его.

Till 23.08.2011 16:40

Вся идея TDD заключается в более быстрой разработке. Вы не пишете ВСЕ тесты, вы что-то пишете, а затем, как только вам нужно что-то вызвать из PHP, вы пишете этот PHP, чтобы он был «вызываемым». А затем напишите еще несколько тестов для этого вывода, а затем напишите немного PHP, чтобы этот вывод произошел. Затем повторите ad aeternum.

Fernando Cordeiro 03.11.2012 06:58

Я лично предпочитаю SimpleTest. Существует средство запуска тестов из командной строки и средство запуска тестов через Интернет, и даже есть Eclipse плагин, позволяющий запускать модульные тесты из самой среды IDE. Я обнаружил, что соединение Zend с PHPUnit намного сложнее наладить, особенно с отладчиком.

Мы используем SimpleTest внутри компании со сценарием непрерывная интеграция, который мы написали сами. Каждый раз, когда мы регистрируем функцию в SVN, мы включаем модульные тесты. Примерно каждый час CI-скрипт запускается и вызывает PHP-скрипт командной строки, который запускает все наши модульные тесты. Если что-то сломается, я получу электронное письмо. Это отличный способ уменьшить количество ошибок в наших системах.

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

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

Я очень рекомендую Разработка через тестирование, Кент Бек (ISBN-10: 0321146530). Он не был написан специально для PHP, но концепции есть и должны быть легко переведены на PHP.

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

Разработка через тестирование - это подход, при котором тесты всегда пишутся до кода. Вы должны сначала изучить PHPUNIT, чтобы начать разработку TDD. Затем, создавая свою функцию, вы всегда должны думать, как функция может выйти из строя, и написать тестовый пример в phpunit, и в конце вы должны написать код, чтобы пройти тест. Это будет новый подход, поэтому вначале это будет немного сложно, но как только вы привыкнете к нему, вы найдете его очень полезным, особенно для ошибок после разработки и стиля кодирования. Вы можете просмотреть это руководство Шаг за шагом, чтобы понять эту концепцию.

Всегда помните, что если тесты написаны после разработки, они бесполезны. Так что TDD необходим, если вы думаете написать unit tesst

Другие вопросы по теме