SimpleTest против PHPunit

127

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

Какая сила каждого из них делает его подходящим для любого конкретного случая?

паан
источник
Я бы
выбрал
9
... и почему? Попытайтесь объяснить свой ответ, предоставьте ресурсы / ссылки / примеры.o
Мануэль
<snark> Почему не оба? </snark>
Agi Hammerthief

Ответы:

90

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

Я действительно сбит с толку, что SimpleTest до сих пор считается альтернативой phpunit. Может быть, меня просто дезинформировали, но, насколько я видел:

  • PHPUnit - это стандарт; большинство фреймворков используют его (например, Zend Framework (1 и 2), Cake, Agavi, даже Symfony отказывается от своей собственной Framework в Symfony 2 для phpunit).
  • PHPUnit интегрирован во все среды разработки PHP (Eclipse, Netbeans, Zend Stuide, PHPStorm) и прекрасно работает.
  • Simpletest имеет расширение eclipse для PHP 5.1 (он же старый) и ничего больше.
  • PHPUnit отлично работает с каждым сервером непрерывной интеграции, поскольку он выводит все стандартные файлы журналов для покрытия кода и отчеты о тестах.
  • Simpletest - нет. Хотя для начала это не большая проблема, она сильно укусит вас, когда вы перестанете «просто тестировать» и начнете разрабатывать программное обеспечение (да, это заявление провокационное :) Не принимайте его слишком серьезно).
  • PHPUnit активно поддерживается, стабилен и отлично работает для любой кодовой базы, любого сценария и любого способа написания тестов.
  • (Субъективно) PHPUnit предоставляет более качественные отчеты о покрытии кода, чем Simpletest
  • С помощью PHPUnit вы также получаете эти отчеты в своей среде IDE ( Netbeans , Eclipse, ...)
  • Также есть несколько предложений для web interface to phpunit tests.

Я еще не видел аргументов в пользу SimpleTest. Установить его даже не проще, поскольку PHPUnit доступен через грушу:

pear channel-discover pear.phpunit.de
pear install phpunit/PHPUnit

и «первый тест» выглядит примерно так же.

Поскольку PHPUnit 3.7его еще проще установить , просто используяPHAR Archive

wget http://pear.phpunit.de/get/phpunit.phar
chmod +x phpunit-3.7.6.phar

или для Windows просто загрузите phar и запустите:

php phpunit-.phar

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

"require-dev": {
    "phpunit/phpunit": "3.7.*"
}

в ваш composer.json.


Для всего, что вы хотите протестировать, PHPUnit найдет решение, и вы сможете найти помощь практически где угодно (SO, #phpunit irc-канал на freenode, почти каждый разработчик php;))

Пожалуйста, поправьте меня, если я что-то не так сказал или что-то забыл :)

Обзор инструментов тестирования PHP

Видео: http://conference.phpnw.org.uk/phpnw11/schedule/sebastian-bergmann/

Слайды: http://www.slideshare.net/sebastian_bergmann/the-php-testers-toolbox-osi-days-2011

Он упоминает такие вещи, как Atoum, который называет себя: «Простая, современная и интуитивно понятная среда модульного тестирования для PHP!»


Полное раскрытие

Первоначально я написал этот ответ в январе 2011 года, когда я не имел отношения ни к одному проекту тестирования PHP. С тех пор я стал сотрудником PHPUnit.

edorian
источник
5
Я обнаружил, что веб-тестирование simpletest было намного проще настроить и запустить, чем веб-тестирование phpunit. Поскольку это в значительной степени необходимость для php, это победа для малых и средних проектов, где вы просто хотите мгновенно добавить среду тестирования, а важны простые уровни тестов. Например, исключая веб-тесты, я обычно использую только метод assertTrue () в simpletest. Веб-тесты, конечно, усложняются, но не обязательно излишне.
Kzqai
1
"> Поскольку это в значительной степени необходимость для php" - я категорически не согласен с этим. Я еще не видел ни одного проекта (или фреймворка) php, который запускал бы свои тесты через браузер. Это создает массу проблем без особой пользы. Времена, когда php-код разрабатывался в системе общего хостинга с использованием ftp-синхронизации, ушли в прошлое ( скрещены пальцы ), и ни один, даже небольшой проект не требует работающего веб-сервера (максимум один php поставляется из коробки). UNIT Тестирование через браузер, а не через cli или IDE - настолько редкий вариант использования, что я не думаю, что это вообще имеет значение.
edorian
13
Сильная причина рассмотреть SimpleTest по сравнению с PHPUnit заключается в том, что последний является инструментом командной строки, который должен быть установлен на сервере, на котором выполняются тесты, что иногда намного сложнее, чем просто includeиспользовать файлы SimpleTest .PHP (как объясняли другие). Для профессиональных программистов, создающих собственную тестовую среду, PHPUnit сложно превзойти, но если интегрировать систему тестирования в приложение с открытым исходным кодом на основе PHP, где «разработчики» приложения могут быть в лучшем случае (что я называю) «профессиональными программистами», тогда Во всяком случае, мне очень нравится простота SimpleTest. FWIW.
MikeSchinkel
2
@MikeSchinkel Я не могу с этим согласиться. Мы использовали SimpleTest в качестве интегрированного решения для тестирования на основе браузера для нашей специализированной инфраструктуры приложений. Он всегда был доступен и не требовал никакой конфигурации установки, кроме svn pull, так как был включен в исходный код фреймворка. Мы перешли на PHPUnit для интеграции в СНГ. Поскольку мы являемся магазином Windows, установка и настройка PHPUnit может быть кошмаром, и многие из наших младших разработчиков просто ломают среду или теряют желание тестировать.
Gavin
1
Ссылка на слайды не работает.
Дмитрий Зайцев
35

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

Причины, по которым мне нравится PHPUnit, заключаются в том, что он интегрируется с другими инструментами разработчика PHP, такими как phing (как и SimpleTest), phpUnderControl и Xinc . Начиная с версии 3.0 он имеет поддержку mocking , активно развивается, документация отличная.

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

РЕДАКТИРОВАТЬ: Phing теперь также интегрируется с SimpleTest.

Эрик Скривнер
источник
4
Просто примечание: на веб-сайте phing говорится, что он поддерживает SimpleTest
philfreo
18
  • Я НЕ мог понять, как загрузить и установить PHPUnit.
  • Однако я мог легко понять, как установить SimpleTest.

    (Насколько я помню, в инструкциях для PHPUnit говорилось что-то вроде «установите его через PEAR, и мы не будем давать никаких инструкций, как это сделать по-другому») см.:

  • http://www.phpunit.de/manual/current/en/installation.html

Для SimpleTest просто загрузите его и укажите на него из своего кода.

Так что Simpletest выиграл для меня.

stfan
источник
4
Я полагаю, что документация изменилась с тех пор, как вы разместили свой ответ. Сегодня вы просто набираете 3 команды, и он будет установлен, вам даже не нужно ничего загружать самостоятельно.
Anti Veeranna
5
Вы можете установить PHPUnit через PEAR, загрузить его вручную или получить последний код с github. На главной странице есть четкая ссылка на инструкции по установке. SimpleTest дает мне только один вариант, указывая на sourceforge и множество рекламных роликов ...
Potherca
1
В Windows установить PHPUnit очень сложно. Пришлось установить на 2 рабочие станции. Первый занял 3 часа, с помощью IRC-канала PEAR. Со второй (той же ОС) мне так и не удалось. Тем не менее, в Linux это прелесть.
FMaz008
1
SimpleTest +1 Простота установки Простота использования. PHPUnit мощнее, чем самый простой, чтобы удовлетворить мои потребности.
Cheung
Возможно, все изменилось с '09, но PHPUnit устанавливается за секунды с помощью всего нескольких команд в Windows.
Cypher
13

Половина упомянутых пунктов в принятом ответе просто неверны:

SimpleTest имеет

  • более простая настройка (распаковать в папку, включить и запустить)
  • просто проверьте папку в системе контроля версий (попробуйте сделать это сейчас с помощью phpunit :))
  • меньше зависимостей и множество расширений (webtester, formtester, auth)
  • хороший репортер покрытия кода, который легко расширять (точки, имена функций, цвета)
  • сводка покрытия кода (наконец-то появилась в PHPUnit 4.x)
  • достойный веб-бегун и веб-бегун на ajax, с группами и выполнением одного файла
  • еще лучший инструмент diff (без пробелов или проблем с новой строкой)
  • адаптер / оболочка для запуска SimpleTests с помощью phpUnit и наоборот
  • совместимость PHP5.4 +

Обратная сторона:

  • не отраслевой стандарт (PHPUnit)
  • активно не поддерживается
Йенс А. Кох
источник
1
Все еще полезен для меня и моего начальника php4-сервера ^^ "
javier_domenech
Спасибо. Я обновил кодовую базу SimpleTest для работы с более новыми версиями PHP, и в течение года будут добавлены новые настройки. - PHP4 является EOL с давних пор и не получает никаких исправлений безопасности. Я бы больше не использовал его на внешних сервисах. Вам следует убедить своего босса разрешить запуск обновления до версии не ниже v5.5 или выше v5.6: php.net/supported-versions.php#php-5.6
Йенс А. Кох,
Я знаю Йенса, спасибо за совет. Очень хорошее решение для тестирования ваше
javier_domenech
1
=) Спасибо, что показали мне репозиторий Github. Я начал беспокоиться о «необслуживаемой части». Заметьте, только внешне, поскольку он по-прежнему делает все, что я когда-либо хотел, от среды тестирования без суеты с современным кодом, с которым я работаю.
jeteon
SimpleTest имеет гораздо большую гибкость в том, как вы настраиваете свои наборы тестов, поскольку вы можете делать все это в PHP-коде. Таким образом, в вашем распоряжении полный язык программирования, а не только файлы конфигурации xml и параметры терминала. PHPUnit может в большей степени поддерживаться инструментами, но больше говорит о том, как сообщество PHP продолжает поддерживать второстепенные вещи.
still_dreaming_1
8

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

Итак, я бы сказал, что преимущество SimpleTest в том, что он очень легкий и портативный.

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

Эрик Оджебо
источник
Ах, чувак, я совершенно случайно отказался от этого голоса и даже не осознавал этого до следующего дня. Теперь мой голос заблокирован ... Извините.
still_dreaming_1
8

Итак, я сделал программу запуска тестов пользовательского интерфейса на веб-основе phpUnit и сделал ее доступной на sourceforge. Использует ajax и имеет довольно крутой интерфейс, если вы хотите попробовать, проверьте его на sourceforge. Название проекта - phpunitwebui, а веб-сайт - http://phpunitwebui.sourceforge.net/.


источник
4

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

Веб-интерфейс Simpletest очень полезен, но иногда может быть громоздким. В моем текущем проекте мне пришлось бы вложить больше усилий в систему, чтобы мое приложение (API) работало с веб-интерфейсом (правильно настроить apache, скопировать файлы в корень public_html и т. Д.), Чем это было бы просто запустить phpunit из рабочего пространства eclipse. Поэтому я выбираю PHPUnit. Кроме того, использование PEAR было большим плюсом, поскольку вам не нужно вручную отслеживать обновления. Просто запускайте pear upgradeвремя от времени, и PHPUnit будет постоянно обновляться.

T0xicCode
источник
Я не понимаю этого анализа. Вы хотите сказать, что тестируете функциональность браузерного типа через плагин eclipse для phpunit вместо локальной установки apache?
Kzqai
Нет, я говорю, что в моем проекте, поскольку нет функций типа браузера, я использую phpunit через eclipse.
T0xicCode 01
2

Это с точки зрения обычного разработчика PHP:

Мне потребовалось два дня, чтобы разобраться в PHPUnit, в основном пытаясь отлаживать под Eclipse, от чего я наконец отказался.

На настройку Simpletest, включая отладку в Eclipse, у меня ушло два часа.

Возможно, в будущем я найду недостатки Simpletest, но пока он хорошо справляется с тем, что мне нужно: TestClasses, Mock-объекты, отладка тестового кода и веб-интерфейс для быстрого снимка ситуации.

Опять же: это с точки зрения обычного пользователя PHP (даже не разработчика :-)

tru7
источник
1

Я какое-то время не проверял Simple Test, в прошлый раз у него был плагин eclipse, что для меня является важным фактором, но он давно не обновлялся. Себастьян Бергманн все еще очень активно работает над PHPUnit, но ему все еще не хватает хорошего плагина для eclipse, но он включен в новую Zend Studio.

франки
источник
1

Это старый вопрос, но я хочу добавить свой опыт: PHPUnit сейчас кажется стандартом, но если вы работаете с устаревшей системой, которая использует множество глобальных переменных, вы можете застрять с самого начала. Похоже, что нет хорошего способа проводить тесты с глобальными переменными в PHPUnit, вам, кажется, нужно устанавливать свои переменные через $ GLOBALS, что НЕ ХОРОШО, если у вас есть множество файлов, устанавливающих глобальные переменные повсюду. Хорошо, некоторые могут сказать, что проблема в устаревшей системе, но это не значит, что мы не можем проводить тесты в такой системе. С SimpleTest все просто. Я полагаю, что если PHPUnit позволяет нам включать файл глобально, а не в рамках какой-либо области класса / функции, это тоже не будет большой проблемой.

Еще одно перспективное решение - http://www.enhance-php.com , выглядит красиво :)

mr1031011
источник
Я всегда просто использовал <phpunit backupGlobals="false">XML в конфигурации и никогда не испытывал проблем с глобальными переменными в тестах ...
Potherca
@ mr1031011 ваша ссылка никуда не годится. Возможно , вы имели в виду ?: github.com/Enhance-PHP/Enhance-PHP
user12345
@Potherca, расскажите мне об этом - у меня изначально было много проблем с глобальными объектами в проекте устаревшего кода, и я думаю, что попробовал все аннотации @backupGlobals @backupStaticAttributes @runInSeparateProcess @preserveGlobalState global $xxxи все его комбинации, прежде чем попытаться --no-globals-backupи внезапно увидеть все работает как положено. : D
conny
-2

когда есть тысячи функций, которые нужно протестировать за один раз, phpunit - это то, что нужно, простой тест не работает, поскольку он основан на сети.

Я до сих пор использую простой Интернет для небольших тестов.

Но оба хороши

user5454174
источник
SimpleTest не основан исключительно на сети. До сих пор я использовал его исключительно из командной строки.
jeteon