Ich teste setSubject
Methode, die das Objekt (leeres Subjekt) setzt, wenn es fehlt.
Zend_Mail löst eine Exception aus, wenn versucht wird, auf eine nicht deklarierte Eigenschaft zuzugreifen (z. B. E-Mail-Betreff fehlt, besser einige Ausnahmen werfen). Weitere Informationen: Ссылка
Das ist es, was ich brauche, um es erfolgreich testen zu können:
Klasse
%Vor%Test
%Vor%Sie können jedoch sehen, dass der catch-Block leer ist, wenn ich diesen Code ausprobiere ...
%Vor%Test schlägt mit der Nachricht fehl:
Es gab 1 Fehler:
1) Email_ParseTest :: testNoSubject InvalidArgumentException: Betreff ist erforderlich
Es beklagt sich, dass $ this- & gt; Betreff nicht gesetzt ist (oder ähnlich).
Weitere Informationen:
subject
ist als leere Zeichenfolge definiert ( ""
) Ich habe die zweite Methode "von Hand" getestet und es funktioniert wie erwartet (Betreff wird innerhalb des catch-Blocks gesetzt). Ich habe nicht viel Erfahrung mit PHPUnit, dies könnte E_PEBKAC
leicht sein.
Wenn ich Ihre Frage nicht missverstanden habe, versuchen Sie eine geschützte Methode zu testen ... Sie können das nicht auf diese Weise tun. Geschützte und private Methoden sollen getestet werden, indem die öffentlichen Methoden getestet werden, die sie verwenden.
Wenn Sie PHP 5.3.2+ mit PHPUnit verwenden, können Sie Ihre privaten und geschützten Methoden direkt testen, indem Sie vor der Ausführung Ihrer Tests Reflektionen verwenden, um sie öffentlich zu machen. Wie Sie jedoch bereits erwähnt haben, Stellen Sie sich vor, öffentliche Methoden zu testen.
Aber wenn Sie die Reflexion verwenden möchten, hier ist ein generisches Beispiel:
%Vor% Sieht so aus, als ob du die falsche Ausnahme fällst: Zend_Mail scheint ein InvalidArgumentException
zu werfen, während du ein Zend_Mail_Exception
fängst.
Probieren Sie den folgenden Code:
%Vor% Wenn Sie Ihre Frage erneut lesen, würde ich sagen, dass Zend_Mail_Exception
niemals geworfen wird.
Wenn Sie try
/ catch
aus dem ersten Codeblock entfernen, wette ich, dass es auch funktioniert:
Zeile 396 bezieht sich auf eine nicht vorhandene Kopfzeile, aber Es sieht so aus, als ob es nicht ausgelöst wird, selbst wenn $this->subject
leer ist (die Ausnahmeklasse und die Nachricht stimmen nicht mit dem Testergebnis überein). Ich vermute, dass dieser Header zuvor in Zend oder anderswo auf einen leeren Wert gesetzt wurde.
Das würde erklären, warum im zweiten Fall $this->subject
niemals gesetzt wird (der Code catch
wird niemals ausgeführt). Die InvalidArgumentException
wird wahrscheinlich von der parseEmail
-Klasse ausgelöst, die erkennt, dass subject
nicht gesetzt ist.
Der zweite Block prüft jedoch unbedingt ! $this->subject
und setzt ihn entsprechend. Also ist der Test bestanden.
Zusammenfassend:
Zend_Mail_Exception
wird niemals geworfen InvalidArgumentException
wird in parseEmail
geworfen
Tags und Links php phpunit object zend-framework try-catch