Weil PHPUnit von xUnit abgeleitet ist und so funktioniert xUnit.
Warum macht xUnit so? Ich bin froh, dass du gefragt hast. Der ursprüngliche Grund, wie Robert hervorhebt, ist, dass xUnit von Smalltalk stammt und von JUnit in Java popularisiert wurde. Beide sind OO-oder-nichts-Sprachen, also hatten sie keine Wahl.
Das soll nicht heißen, dass es keine anderen Vorteile gibt. OO-Tests können vererbt werden. Das bedeutet, wenn Sie eine Unterklasse testen möchten, können Sie alle Tests der Eltern ausführen und die wenigen Testmethoden für die von Ihnen geänderten Verhaltensweisen überschreiben. Dadurch erhalten Sie eine hervorragende Abdeckung der Unterklassen, ohne den Testcode duplizieren zu müssen.
Es ist einfach zu hinzufügen und überschreiben Assert-Methoden in PHPUnit. Einfach Unterklasse PHPUnit_Framework_TestCase
, schreiben Sie Ihre eigenen assert
Methoden und lassen Sie Ihre Testklassen von Ihrer neuen Unterklasse erben. Sie können auch die Standardmethoden setup
und teardown
schreiben.
Schließlich garantiert es, dass die Methoden des Test-Frameworks nicht mit der Sache, die sie testen, kollidieren werden. Wenn das Testframework gerade seine Funktionen in den Test geworfen hat und Sie etwas testen wollten, das eine setup
Methode hatte ... nun, Sie sind in Schwierigkeiten.
Das heißt, ich höre deinen Schmerz. Ein großer Test-Framework kann nervig und umständlich und spröde sein. Perl verwendet keinen xUnit-Stil, es verwendet einen prozeduralen Stil mit kurzen Testfunktionsnamen. Ein Beispiel finden Sie in Test::More. Hinter den Kulissen tut es genau das, was Sie vorgeschlagen haben, es gibt ein Singleton-Testinstanzobjekt, das alle Funktionen verwenden. Es gibt auch eine hybride prozedurale Assert-Funktionen mit OO-Test-Methoden-Modul namens Test::Class, die das Beste aus beiden Welten tut.
Bedenkt man, dass die PHP-Syntax für den Aufruf von Methoden so hässlich ist
Ich denke, Sie nicht die ->
mögen. Ich schlage vor, du lernst damit zu leben. OO PHP ist so viel schöner als die Alternative.
Sie befürworten die Verwendung eines globalen? – Robert
Ja, nehme ich an, aber in einem strengen Kontext. Ok, jetzt hast du mich schmutzig gemacht. –
Könnten Sie bitte die Antworten, die Sie jetzt erhalten haben, überprüfen und entweder die hilfreichsten annehmen oder Ihre Frage verfeinern, um festzustellen, warum keine der Antworten diese für Sie löst? Vielen Dank. – Gordon