unit-testing tutorial - SimpleTest vs PHPunit




example deutsch (11)

Diese Frage ist ziemlich veraltet, aber da es immer noch Verkehr und Antworten gibt, möchte ich meinen Punkt hier noch einmal erwähnen, obwohl ich es bereits bei einigen (neueren) Fragen getan habe.

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

  • PHPUnit ist der Standard; die meisten Frameworks benutzen es (wie Zend Framework (1 & 2), Cake, Agavi, selbst 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 (alias alt) und sonst nichts.
  • PHPUnit funktioniert mit jedem kontinuierlichen Integrationsserver gut, da es alle Standardprotokolldateien für Code Coverage und Testberichte ausgibt.
  • Einfachste nicht. Während dies kein großes Problem zu Beginn ist, wird es Ihnen große Zeit beißen, sobald Sie aufhören "nur zu testen" und beginnen, Software zu entwickeln (Ja, diese Aussage ist provokativ :) Nehmen Sie es nicht zu ernst).
  • PHPUnit wird aktiv gepflegt, stabil und funktioniert für jede Codebasis, jedes Szenario und jede Art, wie Sie Ihre Tests schreiben möchten.
  • (Subjektiv) PHPUnit bietet viel bessere Code-Coverage-Berichte als SimpleTest
  • Mit PHPUnit erhalten Sie diese Berichte auch in Ihrer IDE ( Netbeans , Eclipse, ...)
  • Es gibt auch ein paar Vorschläge für eine web interface to phpunit tests .

Ich habe noch kein Argument für SimpleTest gesehen. Es ist nicht einfacher zu installieren, da PHPUnit über birne verfügbar ist:

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

und der "erste Test" sieht ziemlich gleich aus.

Ab PHPUnit 3.7 es noch einfacher, es zu installieren , indem Sie einfach das PHAR Archive

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

oder für windows einfach phar downloading und ausführen:

php phpunit-.phar

oder wenn Sie den unterstützten Composer installieren , wie

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

zu deinem composer.json.

Für alles, was Sie testen möchten, wird PHPUnit eine Lösung haben und Sie werden in der Lage sein, überall Hilfe zu finden (SO, #phpunit irc channel auf freenode, so ziemlich jeder php-Entwickler;))

Bitte korrigieren Sie mich, wenn ich etwas falsches gesagt habe oder etwas vergessen habe :)

Überblick über PHP-Testwerkzeuge

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 nennt Atoum 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, wo ich keine Verbindung zu einem PHP-Testprojekt hatte. Seitdem habe ich Beiträge zu PHPUnit geleistet.

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

Jede spezifische Stärke, die es für jeden spezifischen Fall geeignet macht?


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

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

Es dauerte zwei Stunden, um SimpleTest inklusive Debugging unter Eclipse zu installieren.

Vielleicht werde ich die Defizite von SimpleTest in der Zukunft finden, aber bisher macht es gut, was ich brauche: TestClasses, Mock-Objekte, Test-Code-Debugging und Web-Interface für eine schnelle Momentaufnahme der Situation.

Nochmal: Dies aus der Sicht eines sehr gelegentlichen PHP-Users (nicht einmal Entwickler :-)


Nun, ich habe einen phpUnit webbasierten UI Test Case Runner erstellt und auf Sourceforge verfügbar gemacht. Benutzt Ajax und hat auch eine ziemlich coole Oberfläche, wenn du es ausprobieren willst, überprüfe es bei Sourceforge. Der Projektname lautet phpunitwebui und die Website http://phpunitwebui.sourceforge.net/


Ich fand SimpleTest war sogar einfacher als PHPUnit einzurichten. Entpacken Sie es einfach und Sie sind gut zu gehen. Ein Vorteil ist, wenn Sie an mehreren Rechnern arbeiten, da Sie das gesamte Testrahmenwerk genauso wie Ihren Quellcode speichern können und dadurch wissen, dass Sie den gleichen Framework-Code verwenden. Vor allem, wenn Sie es in irgendeiner Weise ändern.

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

SimpleTest wird auch mit einer sehr einfachen HTML-GUI ausgeliefert, die Sie einfach erweitern können, wenn Sie möchten. Soweit ich weiß, enthält PHPUnit keine HTML-GUI, aber es gibt GUI's zum Download, wie zum Beispiel Cool .


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

SimpleTest hat

  • das einfachere Setup (entpacken in Ordner, include und run)
  • Überprüfen Sie einfach den Ordner in Versionskontrolle (versuchen Sie das heutzutage mit phpunit :))
  • weniger Abhängigkeiten und viele Erweiterungen (Webtester, Formtester, Auth)
  • ein guter Coverage-Reporter, der einfach zu erweitern ist (Punkte, Funktionsnamen, Farben)
  • eine Code Coverage Zusammenfassung (endlich in PHPUnit 4.x gelandet)
  • ein anständiger Web-Runner und ein Ajax-Web-Runner, mit Gruppen und einzelnen Datei-Ausführungen
  • noch besseres Diff-Tool (ohne Whitespace- oder Newline-Probleme)
  • ein Adapter / Wrapper um SimpleTests von phpUnit zu starten und umgekehrt
  • wird aktiv auf GitHub gepflegt: https://github.com/simpletest
  • Kompatibilität PHP5.4 +

Der Nachteil:

  • kein Industriestandard (PHPUnit)

  • Ich konnte NICHT verstehen, wie PHPUnit heruntergeladen und installiert wird.
  • Ich könnte jedoch leicht verstehen, wie man SimpleTest installiert.

    (Soweit ich mich erinnern kann, sagte die Anleitung für PHPUnit etwas in der Art von "installiere es via PEAR und wir werden keine Anweisungen geben, wie es anders geht"):

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

Laden Sie SimpleTest einfach herunter und zeigen Sie darauf mit Ihrem Code.

So hat Simplestest für mich gewonnen.



Ich bevorzuge jetzt PHPUnit, aber als ich angefangen habe, 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 die Integration mit anderen PHP-Entwickler-Tools wie phing (wie SimpleTest), phpUnderControl und Xinc . Ab Version 3.0 hat es spöttische Unterstützung, wird aktiv weiterentwickelt und die Dokumentation ist hervorragend.

Wirklich der einzige Weg, um diese Frage für sich selbst zu beantworten, ist, beide für eine Zeit auszuprobieren, und zu sehen, die Ihrem Stil besser passt.

BEARBEITEN: Phing integriert jetzt auch mit SimpleTest.


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

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


Wie bereits erwähnt, ist es meistens eine Präferenzwahl, da beide die Tests durchführen, die Sie dafür schreiben, und die Ergebnisse zurückmelden.

Die einfachste Web-Benutzeroberfläche ist sehr nützlich, kann aber manchmal auch mühsam werden. In meinem aktuellen Projekt hätte ich mehr Arbeit in ein System investieren müssen, um meine Anwendung (eine API) mit der Webschnittstelle arbeiten zu lassen (apache korrekt einrichten, Dateien in den root public_html kopieren, usw.), als dies der Fall wäre einfach phpunit aus dem Eclipse-Arbeitsbereich ausführen. Daher wähle ich PHPUnit. Auch die Verwendung von PEAR war ein großer Vorteil, da Sie Updates nicht manuell nachverfolgen müssen. Führen Sie das pear upgrade einfach ab und PHPUnit wird immer auf dem neuesten Stand gehalten.


==wird zur Überprüfung der Gleichheit ohne Berücksichtigung des variablen Datentyps verwendet

===wird für die Prüfung Gleichheit verwendet sowohl den variablen Wert * und ** Datentyp

Beispiel

$a = 5

  1. if ($a == 5) - wird als wahr ausgewertet

  2. if ($a == '5') - wird als wahr ausgewertet, da der Wert beider php intern den String-Wert in eine Ganzzahl konvertiert und beide Werte miteinander vergleicht

  3. if ($a === 5) - wird als wahr ausgewertet

  4. if ($a === '5') - wird als falsch ausgewertet, da der Wert 5 ist, dieser Wert 5 jedoch keine ganze Zahl ist.





php unit-testing phpunit simpletest