SimpleTest проти PHPunit


127

Мені було цікаво, чи може хтось, хто має досвід обох цих матеріалів, пролити трохи світла на значну різницю між ними, якщо такі є?

Якась конкретна сила кожного, що робить його придатним для будь-якого конкретного випадку?


Я б пішов на PHPUnit, це набагато краще
joao baptista

9
... і чому? Спробуйте пояснити свою відповідь, надайте ресурси / посилання / example.o
Мануель

<snark> Чому б не обидва? </snark>
Agi Hammerthief

Відповіді:


90

Це питання є досить застарілим, але оскільки він все ще отримує трафік і відповіді, хоча я заявляю свою думку тут ще раз, тому я вже зробив це в деяких інших (новіших) питаннях.

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

  • PHPUnit - стандарт; більшість фреймворків використовують його (наприклад, Zend Framework (1 і 2), Cake, Agavi, навіть Symfony скидає власну Framework у Symfony 2 для phpunit).
  • PHPUnit інтегрований у кожен PHP IDE (Eclipse, Netbeans, Zend Stuide, PHPStorm) і прекрасно працює.
  • Найпростіший має розширення затемнення для PHP 5.1 (він же старий) і нічого іншого.
  • PHPUnit чудово працює з кожним сервером безперервної інтеграції, оскільки він видає всі стандартні файли журналів для покриття коду та тестових звітів.
  • Найпростіший - ні. Незважаючи на те, що це не велика проблема, починати з цього буде кусати вас великий час, як тільки ви припините "просто тестувати" і почнете розробляти програмне забезпечення (Так, ця заява є провокаційною :) Не сприймайте це занадто серйозно).
  • 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, ви знайдете рішення, і ви зможете знайти допомогу в будь-якому місці (ТАК, #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.


5
Я виявив, що найпростіше веб-тестування було набагато простіше налаштувати та запустити, ніж веб-тестування phpunit. Оскільки це дуже важливо з php, це виграш для малих та середніх проектів, де ви просто хочете кинутись у тестувальну основу в мить, і важливо - прості рівні тестів. Наприклад, виключаючи веб-тести, я, як правило, використовую лише метод assertTrue () в найпростішому. Веб-тести, звичайно, ускладнюються, але вони не повинні бути надмірно такими.
Kzqai

1
"> Оскільки це дуже важливо з php" - я категорично не згоден з цим. Я ще не бачив жодного php-проекту (або фреймворку), який виконує свої тести через браузер. Це створює цілу масу проблем без фактичної користі. Часи, коли PHP-код розроблявся в спільній хостинговій системі, що використовує синхронізацію ftp, мертві та зникли ( схрещеними пальцями ), і жоден, навіть невеликий, проект вимагає запущеного веб-сервера (щонайбільше одного PHP поставляється поза коробкою). UNIT Тестування через браузер, а не на cli або IDE - це настільки рідкісний випадок використання, що я не думаю, що це взагалі має значення.
едоріанський

13
Важливою причиною вважати SimpleTest над PHPUnit є те, що останній є інструментом командного рядка, який повинен бути встановлений на сервері, на якому виконуються тести, що часом набагато складніше, ніж просто includeвикористовувати файли .PHP SimpleTest (як пояснили інші). Для професійних програмістів, що створюють власне тестове середовище, PHPUnit здається важко перемогти, але якщо інтегрувати тестувальну систему в додаток з відкритим кодом, заснований на PHP, де "розробники" для програми можуть бути в кращому випадку (те, що я називаю) "професійними програмістами", то простота SimpleTest для мене справді приваблива. FWIW.
MikeSchinkel

2
@MikeSchinkel Я не міг більше погодитися. Ми використовували SimpleTest в якості інтегрованого рішення для тестування на основі браузера. Він завжди був доступний і не потребував конфігурації інсталяції за викликом svn, оскільки він був включений у джерело фреймворку. Ми переїхали до PHPUnit для інтеграції в СНД. Оскільки ми є магазином Windows, PHPUnit може бути кошмаром для встановлення та налаштування, а багато наших молодших розробників просто порушують середовище або втрачають волю до тестування.
Гавін

1
Посилання на слайди порушено.
Дмитро Зайцев

35

Зараз я віддаю перевагу PHPUnit, але коли я почав працювати, я використовував SimpleTest, оскільки не завжди мав доступ до командного рядка. SimpleTest - це приємно, але єдине, що він дійсно має над PHPUnit, на мою думку, - це веб-бігун.

Причини, які мені подобаються в PHPUnit, полягають у тому, що він інтегрується з іншими інструментами для розробників PHP, такими як phing (як це робить SimpleTest), phpUnderControl та Xinc . З версії 3.0 він має глузливу підтримку, активно розробляється, а документація - чудова.

Дійсно, єдиний спосіб відповісти на це запитання для себе - спробувати обидва на час і побачити, який краще відповідає вашому стилю.

EDIT: Phing тепер інтегрується і з SimpleTest.


4
Лише зауважте, веб-сайт phing говорить, що він підтримує SimpleTest
philfreo

18
  • Я не міг зрозуміти, як завантажити та встановити PHPUnit.
  • Однак я міг би легко зрозуміти, як встановити SimpleTest.

    (Наскільки я пам’ятаю, інструкції для PHPUnit сказали щось за принципом «встановіть це через PEAR, і ми не дамо ніяких інструкцій, як це зробити іншим способом») див:

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

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

Тож Найпростіший виграв для мене.


4
Я вважаю, що документація змінилася з моменту публікації відповіді. Сьогодні ви просто набираєте 3 команди, і вони будуть встановлені, вам навіть нічого не потрібно завантажувати самостійно.
Anti Veeranna

5
Ви можете встановити PHPUnit через PEAR, завантажити його вручну або витягнути останній код з github. На домашній сторінці є чітке посилання на інструкції з встановлення. SimpleTest дає мені лише один варіант, вказуючи на sourceforge, і це безліч рекламних роликів ...
Potherca

1
У Windows, PHPUnit - це біль встановити. Довелося встановити його на 2 робочій станції. Перший зайняв 3 години, за допомогою шанелю PEAR IRC. Для другої (тієї ж ОС) мені ніколи не вдалося. Однак, для Linux це принадність.
FMaz008

1
SimpleTest +1 Простий в монтажі Простий у використанні. PHPUnit потужний, але, проте, найпростіший для задоволення моїх потреб.
Чжун

Можливо, змінилися речі з '09 року, але PHPUnit встановлюється за лічені секунди за допомогою декількох команд у Windows.
Cypher


13

Половина згаданих пунктів у прийнятій відповіді просто не відповідає дійсності:

SimpleTest має

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

Мінус:

  • не галузевий стандарт (PHPUnit)
  • не підтримується активно

1
Ще корисний мені і моєму босу php4 server ^^ "
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 GUI, який досить просто розширити, якщо ви хочете. Наскільки мені відомо, PHPUnit не включає HTML GUI, але для завантаження доступні GUI: s, наприклад, Cool .


Ах, людино, я сприйняв це зовсім випадково і навіть не усвідомив це до наступного дня. Тепер мій голос заблокований ... Вибачте.
still_dreaming_1

8

Добре, я зробив базу даних тестового випадку інтерфейсу інтерфейсу phpUnit і зробив це доступним у sourceforge. Використовує ajax і має досить класний інтерфейс, якщо ви хочете дати йому зняти, перевірте це у sourceforge. Назва проекту - phpunitwebui, а веб-сайт http://phpunitwebui.sourceforge.net/


4

Як було зазначено, це переважно вибір переваги, оскільки обидва запускають тести, які ви пишете для цього, та повідомляєте про результати.

Найпростіший веб-інтерфейс дуже корисний, але він також може часом бути громіздким. У моєму поточному проекті мені довелося б докласти більше роботи до системи, щоб моя програма (API) працювала з веб-інтерфейсом (правильно налаштувати апаш, копіювати файли в корінь public_html тощо), ніж це було б просто запустити phpunit з робочої області eclipse. Тому я обираю PHPUnit. Також використання PEAR було великим плюсом, оскільки вам не потрібно відстежувати оновлення вручну. Просто запустіть pear upgradeраз у раз, і PHPUnit буде постійно оновлюватися.


Я не отримую цього аналізу. Ви хочете сказати, що ви перевіряєте функціональність браузера через плагін eclipse для phpunit замість локальної установки apache?
Kzqai

Ні, я кажу, що в моєму проекті, оскільки немає функціональності браузера, я використовую phpunit через eclipse.
T0xicCode

2

Це з точки зору дуже випадкового розробника PHP:

На це пішло два дні, щоб зрозуміти PHPUnit, здебільшого намагаючись налагодити програму Eclipse, від якої я нарешті відмовився.

На встановлення найпростішого, включаючи налагодження під Eclipse, знадобилося дві години.

Можливо, я знайду недоліки Simpletest у майбутньому, але поки це добре робить те, що мені потрібно: TestClasses, Mock-об'єкти, налагодження тестового коду та веб-інтерфейс для швидкого огляду ситуації.

Знову ж таки: Це з точки зору дуже випадкового користувача PHP (навіть не розробника :-)


1

Я не перевіряв Простий тест деякий час, востаннє у нього був плагін затемнення, що є головним фактором для мене, але він не оновлювався давно. Себастьян Бергманн все ще дуже активно працює над PHPUnit, але він все ще не має гарного плагіна для затемнення - але він включений до нової Zend Studio.


1

Це питання давнє, але я хочу додати свій досвід: PHPUnit, здається, є стандартом зараз, але якщо ви працюєте зі застарілою системою, яка використовує багато і безліч глобальних змінних, ви можете зациклюватися на ходу. Здається, що у PHPUnit немає хорошого способу зробити тести з глобальними варами, вам здається, що вам доведеться встановлювати свої змінні за допомогою $ GLOBALS, що НЕ БУДЕ ДОБРО, якщо всюди є багато файлів, що встановлюють глобальні змінні. Добре, деякі можуть сказати, що проблема в застарілій системі, але це не означає, що ми не можемо робити тести на такій системі. З SimpleTest така річ проста. Я думаю, якщо PHPUnit дозволяє нам включати файл у всьому світі, а не в межах будь-якого класу / функції, то це також не буде великою проблемою.

Ще одне перспективне рішення - http://www.enhance-php.com , виглядає приємно :)


Я завжди просто використовував <phpunit backupGlobals="false">у XML-конфігурації і ніколи не мав жодних проблем із глобальними тестами ...
Potherca,

@ mr1031011 ваше посилання не кудись корисне. Можливо, ви мали на увазі ?: github.com/Enhance-PHP/Enhance-PHP
user12345

@Potherca розкажіть про це - я спочатку мав багато проблем з глобальними елементами у спадковому кодовому проекті, і, думаю, я спробував усі примітки @backupGlobals @backupStaticAttributes @runInSeparateProcess @preserveGlobalState, global $xxxі всі його комбінації, перш ніж спробувати --no-globals-backupі раптом побачити все працює, як очікувалося. : D
конні

-2

коли є тисячі функцій, які потрібно перевірити за один раз, phpunit - це спосіб пройти, простий тест стає невдалим, оскільки він базується на веб-сторінках.

Я все ще використовую просту мережу в Інтернеті для невеликих тестів.

Але і те, і інше добре


SimpleTest - це не виключно веб-основа. Я використовував його виключно з командного рядка до цих пір.
jeteon
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.