Gibt es eine Möglichkeit, einen Test für die Ausgabe auszuführen, die durch einen Aufruf von 'error_log (' Message ')' erzeugt wurde, wenn Unit-Tests mit phpunit durchgeführt wurden?Gibt es eine Möglichkeit, die Ausgabe in PHPUnit-Tests auf error_log zu "erwarten"?
Beispielcode, einer meiner Funktionen prüft eine Kreditkarte mit einem Luhn-Algorithmus:
if($checkLuhn && ($this->_luhn_check($cardNumber) == false)) {
error_log(__METHOD__ . " cardNumber failed luhn algorithm check.");
return false;
}
$ checkLuhn ein boolean in vergangen ist es zu sagen, ob die Prüfung zu tun, die _luhn_check() true zurück, wenn Die $ cardNumber wird übergeben. Problem ist, ich habe mehr als einen Test in dieser Funktion, die falsch zurückgeben kann. Ich kann assertEquals für den Rückgabewert verwenden, aber auch überprüfen, warum der Fehler ausgelöst wurde.
Kannst du error_log überschreiben oder die Syslog-Ausgabe irgendwie in einem Komponententest erfassen?
Gibt es da eine Ausnahme? 'This -> _ luhn_check ($ cardNumber)'? Wenn ja, können Sie diese Ausnahme erhalten und in Ihrem Test protokollieren. – Jhn
Ich denke, dass Sie eine gewisse Abstraktionsebene bei Ihrer Fehlererkennung/Protokollierung vermissen. Wenn Sie eine Klasse zum Protokollieren aller Fehler verwenden, müssen Sie diese Klasse nur bei Ihren Tests vortäuschen. Dann würden Sie diese Klasse auch testen, um zu überprüfen, ob sie wie erwartet funktioniert. Was Sie hier testen möchten, ist, dass der Fehler ausgelöst wird, nicht was passiert, wenn ein Fehler ausgelöst wird. – gontrollez
Ich stimme mit @gontrollez überein, die Protokollierung sollte unbedingt aus dem Code herausgenommen und als Dienst eingeführt werden. Sie werden in der Lage sein, bessere (und einfachere) Tests zu schreiben, und Sie erhalten viel Flexibilität und können in mehr als ein Protokoll schreiben. –