SimpleTest gegen PHPunit


127

Ich habe mich gefragt, ob jemand, der Erfahrung mit diesen beiden Dingen hat, etwas Licht auf den signifikanten Unterschied zwischen den beiden werfen kann, wenn überhaupt?

Gibt es eine bestimmte Stärke, die es für einen bestimmten Fall geeignet macht?


Ich würde für PHPUnit gehen, es ist viel besser
Joao Baptista

9
... und warum? Versuchen Sie, Ihre Antwort zu erklären, Ressourcen / Links / Beispiele bereitzustellen.o
Manuel

<snark> Warum nicht beides? </ snark>
Agi Hammerthief

Antworten:


90

Diese Frage ist ziemlich veraltet, aber da es immer noch Verkehr und Antworten gibt, sage ich hier noch einmal meinen Standpunkt, obwohl ich es bereits bei einigen anderen (neueren) Fragen getan habe.

Ich bin wirklich sehr verblüfft, dass SimpleTest immer noch als Alternative zu phpunit angesehen wird. Vielleicht bin ich nur falsch informiert, aber soweit ich gesehen habe:

  • PHPUnit ist der Standard; Die meisten Frameworks verwenden es (wie Zend Framework (1 & 2), Cake, Agavi, sogar Symfony lässt ihr eigenes Framework in Symfony 2 für phpunit fallen).
  • PHPUnit ist in jede PHP-IDE (Eclipse, Netbeans, Zend Stuide, PHPStorm) integriert und funktioniert gut.
  • Simpletest hat eine Eclipse-Erweiterung für PHP 5.1 (auch bekannt als alt) und sonst nichts.
  • PHPUnit funktioniert problemlos mit jedem Server für die kontinuierliche Integration, da alle Standardprotokolldateien für die Codeabdeckung und Testberichte ausgegeben werden.
  • Simpletest nicht. Dies ist zwar zunächst kein großes Problem, aber es wird Sie beißen, wenn Sie aufhören, "nur zu testen" und mit der Entwicklung von Software beginnen (Ja, diese Aussage ist provokativ :) Nehmen Sie es nicht zu ernst).
  • PHPUnit wird aktiv gewartet, ist stabil und funktioniert hervorragend für jede Codebasis, jedes Szenario und jede Art und Weise, wie Sie Ihre Tests schreiben möchten.
  • (Subjektiv) PHPUnit bietet viel schönere Berichte zur Codeabdeckung als Simpletest
  • Mit PHPUnit erhalten Sie diese Berichte auch in Ihrer IDE ( Netbeans , Eclipse, ...)
  • Auch gibt es ein paar Vorschläge für eine web interface to phpunit tests.

Ich habe noch kein Argument für SimpleTest gesehen. Die Installation ist nicht einmal einfacher, da PHPUnit über pear erhältlich ist:

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

und der "erste Test" sieht ziemlich gleich aus.

Ab PHPUnit 3.7es ist noch einfacher zu installieren es nur durch die Verwendung vonPHAR Archive

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

oder für Windows einfach das Phar herunterladen und ausführen:

php phpunit-.phar

oder wenn Sie den unterstützten Composer verwenden, installieren Sie Möglichkeiten wie

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

an Ihren composer.json.


Für alles, was Sie testen möchten, wird PHPUnit eine Lösung haben und Sie werden praktisch überall Hilfe finden können (SO, #phpunit irc channel auf freenode, so ziemlich jeder PHP-Entwickler;))

Bitte korrigieren Sie mich, wenn ich etwas falsch angegeben oder etwas vergessen habe :)

Übersicht über PHP-Testtools

Video: http://conference.phpnw.org.uk/phpnw11/schedule/sebastian-bergmann/

Folien: http://www.slideshare.net/sebastian_bergmann/the-php-testers-toolbox-osi-days-2011

Es erwähnt Dinge wie Atoum, die sich selbst nennen: "Ein einfaches, modernes und intuitives Unit-Testing-Framework für PHP!"


Vollständige Offenlegung

Ich habe diese Antwort ursprünglich im Januar 2011 geschrieben, als ich mit keinem PHP-Testprojekt verbunden war. Seitdem habe ich einen Beitrag zu PHPUnit geleistet.


5
Ich habe festgestellt, dass die Webtests von simpletest viel einfacher einzurichten und zum Laufen zu bringen waren als die Webtests von phpunit. Da dies bei PHP so ziemlich eine Notwendigkeit ist, ist dies ein Gewinn für kleine bis mittlere Projekte, bei denen Sie sofort ein Test-Framework einbauen möchten und das Wichtigste einfache Teststufen sind. Mit Ausnahme von Webtests verwende ich beispielsweise die Methode assertTrue () nur im einfachsten Test. Web-Tests werden natürlich komplizierter, müssen es aber nicht übermäßig sein.
Kzqai

1
"> Da das bei PHP so ziemlich eine Notwendigkeit ist" - da bin ich mir nicht einig. Ich habe noch kein PHP-Projekt (oder Framework) gesehen, das seine Tests über einen Browser ausführt. Es schafft eine ganze Reihe von Problemen ohne wirklichen Nutzen. Die Zeiten, in denen PHP-Code auf einem gemeinsam genutzten Hosting-System mit FTP-Synchronisierung entwickelt wurde, sind vorbei ( Daumen drücken ), und kein, auch nicht kleines Projekt, erfordert einen laufenden Webserver (höchstens der eine PHP wird sofort ausgeliefert). UNIT Das Testen über einen Browser und nicht über die CLI oder eine IDE ist ein so seltener Anwendungsfall, dass ich nicht denke, dass es überhaupt darauf ankommt.
Edorian

13
Ein wichtiger Grund, SimpleTest über PHPUnit in Betracht zu ziehen, ist, dass letzteres ein Befehlszeilentool ist, das auf dem Server installiert werden muss, auf dem die Tests ausgeführt werden. includeDies ist manchmal viel schwieriger als nur die SimpleTest-PHP-Dateien (wie andere erklärt haben). für die professionellen Programmierer , ihre eigene Testumgebung PHPUnit Gebäude heraus klingt schwer zu schlagen , aber wenn ein Testsystem in einen PHP-basierten Open-Source - app , wo die Integration von „Entwickler“ für die App können im besten Fall sein (was ich) „beruflicher Programmierer“ dann Die Einfachheit von SimpleTest hat für mich jedenfalls einen echten Reiz. FWIW.
MikeSchinkel

2
@ MikeSchinkel Ich könnte nicht mehr zustimmen. Wir haben SimpleTest als integrierte browserbasierte Testlösung für unser maßgeschneidertes Anwendungsframework verwendet. Es war immer verfügbar und erforderte keine Installationskonfiguration über einen SVN-Pull hinaus, da es in der Quelle des Frameworks enthalten war. Wir sind für die CIS-Integration zu PHPUnit gewechselt. Da wir ein Windows-Shop sind, kann die Installation und Konfiguration von PHPUnit ein Albtraum sein, und viele unserer Junior-Entwickler brechen einfach die Umgebung oder verlieren den Willen zum Testen.
Gavin

1
Der Link zu den Folien ist unterbrochen.
Dmitri Zaitsev

35

Ich bevorzuge jetzt PHPUnit, aber als ich anfing, habe ich SimpleTest verwendet, da ich nicht immer Zugriff auf die Befehlszeile hatte. SimpleTest ist nett, aber das einzige, was es wirklich über PHPUnit hat, ist meiner Meinung nach der Web-Runner.

Die Gründe, warum ich PHPUnit mag, sind, dass es in andere PHP-Entwicklertools wie Phing (wie SimpleTest), phpUnderControl und Xinc integriert ist . Ab Version 3.0 wird es spöttisch unterstützt, wird aktiv weiterentwickelt und die Dokumentation ist ausgezeichnet.

Die einzige Möglichkeit, diese Frage für sich selbst zu beantworten, besteht darin, beide eine Zeit lang auszuprobieren und herauszufinden, welche besser zu Ihrem Stil passt.

BEARBEITEN: Phing lässt sich jetzt auch in SimpleTest integrieren.


4
Nur eine Anmerkung, Phings Website sagt, dass es SimpleTest unterstützt
Philfreo

18
  • Ich konnte NICHT verstehen, wie man PHPUnit herunterlädt und installiert.
  • Ich konnte jedoch leicht verstehen, wie SimpleTest installiert wird.

    (Soweit ich mich erinnern kann, sagten die Anweisungen für PHPUnit etwas in der Art von "Installiere es über PEAR und wir werden keine Anweisungen geben, wie es anders gemacht wird") siehe:

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

Für Simple , laden Sie es einfach und es aus dem Code verweisen.

Also hat Simpletest für mich gewonnen.


4
Ich nehme an, die Dokumentation hat sich geändert, seit Sie Ihre Antwort veröffentlicht haben. Heute geben Sie nur 3 Befehle ein und es wird installiert. Sie müssen nicht einmal selbst etwas herunterladen.
Anti Veeranna

5
Sie können PHPUnit über PEAR installieren, manuell herunterladen oder den neuesten Code von github abrufen. Es gibt einen klaren Link zu den Installationsanweisungen auf der Homepage. SimpleTest gibt mir nur eine Option, die auf
SourceForge

1
Unter Windows ist die Installation von PHPUnit schwierig. Ich musste es auf 2 Workstations installieren. Der erste dauerte 3 Stunden mit Hilfe des PEAR IRC-Kanals. Für das zweite (dasselbe Betriebssystem) war ich nie erfolgreich. Das heißt, unter Linux ist es ein Zauber.
FMaz008

1
SimpleTest +1 Einfach zu installieren Einfach zu bedienen. PHPUnit ist leistungsfähiger als der einfachste Test, um meine Bedürfnisse zu befriedigen.
Cheung

Möglicherweise haben sich die Dinge seit '09 geändert, aber PHPUnit wurde in Sekundenschnelle mit nur wenigen Befehlen unter Windows installiert.
Cypher


13

Die Hälfte der genannten Punkte in der akzeptierten Antwort ist einfach nicht wahr:

SimpleTest hat

  • die einfachere Einrichtung (in Ordner extrahieren, einschließen und ausführen)
  • checke einfach den Ordner in die Versionskontrolle ein (versuche das heutzutage mit phpunit :))
  • weniger Abhängigkeiten und viele Erweiterungen (Webtester, Formtester, Auth)
  • ein guter Reporter für die Codeabdeckung, der einfach zu erweitern ist (Punkte, Funktionsnamen, Farben)
  • eine Zusammenfassung der Codeabdeckung (endlich in PHPUnit 4.x gelandet)
  • Ein anständiger Web-Runner und ein Ajax-Web-Runner mit Gruppen und Ausführungen einzelner Dateien
  • noch besseres Diff-Tool (ohne Whitespace- oder Newline-Probleme)
  • ein Adapter / Wrapper zum Ausführen von SimpleTests von phpUnit und umgekehrt
  • Kompatibilität PHP5.4 +

Der Nachteil:

  • kein Industriestandard (PHPUnit)
  • nicht aktiv gepflegt

1
Immer noch nützlich für mich und meinen Chef PHP4 Server ^^ "
Vivoconunxino

Vielen Dank. Ich habe die Codebasis von SimpleTest aktualisiert, um mit neueren PHP-Versionen zu arbeiten, und im Laufe des Jahres werden weitere Optimierungen vorgenommen. - PHP4 ist seit Ewigkeiten EOL und erhält keine Sicherheitspatches. Ich würde es nicht mehr für externe Dienste verwenden. Sie sollten Ihren Chef davon überzeugen, ein Update auf mindestens Version 5.5 oder besser Version 5.6
Jens A. Koch

Ich kenne Jens, danke für den Rat. Sehr schöne
Testlösung für Sie

1
=) Danke, dass du mir das Github-Repo gezeigt hast. Ich hatte angefangen, mir Sorgen um das "nicht gewartete Stück" zu machen. Wohlgemerkt nur oberflächlich, da es immer noch alles tut, was ich mir jemals von einem unkomplizierten Testframework mit dem modernen Code gewünscht habe, mit dem ich arbeite.
Jeteon

SimpleTest bietet viel mehr Flexibilität bei der Einrichtung Ihrer Testsuiten, da Sie alles in PHP-Code erledigen können. Sie haben also eine vollständige Programmiersprache zur Verfügung, nicht nur XML-Konfigurationsdateien und Terminalparameter. PHPUnit wird möglicherweise stärker von Tools unterstützt, sagt jedoch mehr darüber aus, wie sich die PHP-Community weiterhin dafür entscheidet, minderwertige Dinge zu unterstützen.
still_dreaming_1

8

Ich fand, dass SimpleTest noch einfacher als PHPUnit einzurichten war. Extrahieren Sie es einfach und Sie können loslegen. Dies hat den Vorteil, dass Sie auf mehr als einem Computer arbeiten, da Sie das gesamte Testframework auf dieselbe Weise wie Ihren Quellcode speichern können und somit wissen, dass Sie denselben Frameworkcode verwenden. Vor allem, wenn Sie es in irgendeiner Weise ändern.

Daher würde ich sagen, dass eine Stärke von SimpleTest darin besteht, dass es sehr leicht und tragbar ist.

SimpleTest wird auch mit einer sehr einfachen HTML-GUI geliefert, die bei Bedarf recht einfach zu erweitern ist. Soweit ich weiß, enthält PHPUnit keine HTML-GUI, es stehen jedoch GUI-Dateien zum Herunterladen zur Verfügung, z. B. Cool .


Ah, Mann, ich habe das völlig zufällig abgelehnt und es erst am nächsten Tag bemerkt. Jetzt ist meine Stimme gesperrt ... Entschuldigung.
still_dreaming_1

8

Nun, ich habe einen webbasierten Testfall-Runner für phpUnit erstellt und ihn auf sourceforge verfügbar gemacht. Verwendet Ajax und hat auch eine ziemlich coole Oberfläche, wenn Sie es ausprobieren möchten, überprüfen Sie es bei SourceForge. Der Projektname lautet phpunitwebui und die Website lautet http://phpunitwebui.sourceforge.net/


4

Wie bereits erwähnt, ist dies meistens eine bevorzugte Wahl, da beide die Tests ausführen, die Sie dafür schreiben, und die Ergebnisse zurückmelden.

Die Simpletest-Web-Benutzeroberfläche ist sehr nützlich, kann aber manchmal auch umständlich werden. In meinem aktuellen Projekt hätte ich mehr Arbeit in ein System stecken müssen, damit meine Anwendung (eine API) mit der Weboberfläche funktioniert (Apache korrekt einrichten, Dateien in das Stammverzeichnis public_html kopieren usw.), als dies der Fall gewesen wäre um einfach phpunit vom Eclipse-Arbeitsbereich aus auszuführen. Deshalb wähle ich PHPUnit. Auch die Verwendung von PEAR war ein großes Plus, da Sie Updates nicht manuell verfolgen müssen. Einfach ab und zu ausführen pear upgradeund PHPUnit wird auf dem neuesten Stand gehalten.


Ich verstehe diese Analyse nicht. Wollen Sie damit sagen, dass Sie die Funktionalität vom Typ Browser über das Eclipse-Plugin für phpunit anstelle eines lokalen Apache-Setups testen?
Kzqai

Nein, ich sage, dass ich in meinem Projekt, da es keine browserähnliche Funktionalität gibt, phpunit über Eclipse verwende.
T0xicCode

2

Dies ist aus der Sicht eines sehr gelegentlichen PHP-Entwicklers:

Ich brauchte zwei Tage, um PHPUnit zu verstehen, und versuchte hauptsächlich, unter Eclipse zu debuggen, das ich schließlich aufgab.

Ich habe zwei Stunden gebraucht, um Simpletest einschließlich Debugging unter Eclipse einzurichten.

Vielleicht werde ich in Zukunft die Mängel von Simpletest finden, aber bisher macht es gut, was ich brauche: TestClasses, Mock-Objekte, Testcode-Debugging und Webinterface für eine schnelle Momentaufnahme der Situation.

Nochmals: Dies aus der Sicht eines sehr gelegentlichen PHP-Benutzers (nicht einmal Entwickler :-)


1

Ich habe Simple Test eine Weile nicht überprüft, das letzte Mal hatte es ein Eclipse-Plugin, was ein wichtiger Faktor für mich ist, aber es wurde lange nicht aktualisiert. Sebastian Bergmann arbeitet immer noch sehr aktiv an PHPUnit, aber es fehlt immer noch ein gutes Plugin für Eclipse - aber es ist für das neue Zend Studio enthalten.


1

Diese Frage ist alt, aber ich möchte meine Erfahrung hinzufügen: PHPUnit scheint jetzt der Standard zu sein, aber wenn Sie mit einem Legacy-System arbeiten, das viele, viele globale Variablen verwendet, können Sie von Anfang an stecken bleiben. Es scheint, als gäbe es keine gute Möglichkeit, Tests mit globalen Variablen in PHPUnit durchzuführen. Sie müssen Ihre Variablen anscheinend über $ GLOBALS festlegen, was NICHT GUT ist, wenn Sie Tonnen von Dateien haben, die überall globale Variablen festlegen. OK, einige mögen sagen, dass das Problem im Legacy-System liegt, aber das bedeutet nicht, dass wir auf einem solchen System keine Tests durchführen können. Mit SimpleTest ist so etwas einfach. Ich nehme an, wenn PHPUnit es uns erlaubt, eine Datei global und nicht in einen Klassen- / Funktionsbereich aufzunehmen, wäre dies ebenfalls kein allzu großes Problem.

Eine andere vielversprechende Lösung ist http://www.enhance-php.com , sieht gut aus :)


Ich habe immer nur <phpunit backupGlobals="false">in der Konfiguration XML verwendet und hatte nie Probleme mit Globals in Tests ...
Potherca

@ mr1031011 Ihr Link geht nicht an einen nützlichen Ort. Vielleicht meinten Sie?: Github.com/Enhance-PHP/Enhance-PHP
user12345

@Potherca erzähl mir davon - Ich hatte anfangs viele Probleme mit Globals in einem Legacy-Code-Projekt und ich glaube, ich habe alle Annotationen @backupGlobals @backupStaticAttributes @runInSeparateProcess @preserveGlobalState global $xxxund alle ihre Kombinationen ausprobiert, bevor --no-globals-backupich versucht habe und plötzlich alle gesehen habe wie erwartet arbeiten. : D
Conny

-2

Wenn es Tausende Funktionen gibt, die auf einmal getestet werden müssen, ist phpunit der richtige Weg. Ein einfacher Test ist nicht ausreichend, da er webbasiert ist.

Ich benutze immer noch einfaches Web für kleine Tests.

Aber beide sind gut


SimpleTest ist nicht rein webbasiert. Ich habe es bisher ausschließlich über die Kommandozeile verwendet.
Jeteon
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.