[CakePHP] Auf ein Neues: Controller Testen, “CakeEmail” verwenden

Im letzten Beitrag habe ich erklärt, wie man einen Controller testen kann, der die neue CakePHP-Klasse „CakeEmail“ verwendet. Direkt nach dem Posten dieses Artikels kam mir die Idee: wieso nicht die ganze Klasse mocken anstatt nur den Transport-Layer der CakeEmail-Klasse zu ersetzen?Auf gehts, einfach mal ausprobieren. Die protected-Membervariable in der Controller-Klasse bleibt bestehen, ebenso die Konfiguration in der Klasse EmailConfig. Im Test selber wird die Zeile

$Users->email->transport('Debug');

durch

$Users->email = $this->getMock('CakeEmail');

ersetzt. Damit hat man in der Variable ‚email‘ ein komplett gemocktes CakeEmail-Objekt. Da die Methode getMock direkt von PHPUnit kommt, kann man natürlich auch die überladenen Versionen verwenden, die nur gewisse Methoden mocken (siehe dazu das oben genannte Handbuch zu PHPUnit und frag mal Google nach einem gescheiten Tutorial).

Mit diesem Objekt lassen sich nun auch typische Mock-Asserts generieren:

$Users->email->expects($this->never())->method('send');

Ob es jetzt besser ist, nur den Transport-Layer des CakeEmail-Objekts zu ersetzen oder sich ein dediziertes Mock-Objekt erstellen zu lassen, hängt sicherlich davon ab, was man genau testen will. Für einfachere Abfragen wie z.B. ob die Adresse des Empfängers korrekt ist, reicht die erste Variante mit Sicherheit. Für komplexere Controller ist die Mock-Variante wahrscheinlich besser geeignet.

Happy Testing!


Beitrag veröffentlicht

in

, ,

von

Schlagwörter:

Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert