{"id":94,"date":"2012-02-06T23:02:28","date_gmt":"2012-02-06T22:02:28","guid":{"rendered":"http:\/\/www.pfft.ch\/wordpress\/?p=94"},"modified":"2012-02-06T23:03:01","modified_gmt":"2012-02-06T22:03:01","slug":"cakephp-auf-ein-neues-controller-testen-cakeemail-verwenden","status":"publish","type":"post","link":"https:\/\/www.pfft.ch\/wordpress\/2012\/02\/cakephp-auf-ein-neues-controller-testen-cakeemail-verwenden\/","title":{"rendered":"[CakePHP] Auf ein Neues: Controller Testen, \u201cCakeEmail\u201d verwenden"},"content":{"rendered":"<p>Im <a href=\"http:\/\/www.pfft.ch\/wordpress\/2012\/02\/cakephp-teste-controller-die-cakeemail-verwenden\/\">letzten Beitrag<\/a> habe ich erkl\u00e4rt, wie man einen Controller testen kann, der die neue CakePHP-Klasse &#8222;CakeEmail&#8220; 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?<!--more-->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<\/p>\n<pre class=\"brush: php; title: ; notranslate\" title=\"\">$Users-&gt;email-&gt;transport('Debug');<\/pre>\n<p>durch<\/p>\n<pre class=\"brush: php; title: ; notranslate\" title=\"\">$Users-&gt;email = $this-&gt;getMock('CakeEmail');<\/pre>\n<p>ersetzt. Damit hat man in der Variable &#8218;email&#8216; ein komplett gemocktes CakeEmail-Objekt. Da die Methode getMock direkt von <a href=\"http:\/\/www.phpunit.de\/manual\/current\/en\/\">PHPUnit<\/a> kommt, kann man nat\u00fcrlich auch die \u00fcberladenen Versionen verwenden, die nur gewisse Methoden mocken (siehe dazu das oben genannte Handbuch zu PHPUnit und frag mal <a href=\"http:\/\/lmgtfy.com\/?q=PHPUnit+tutorial\">Google<\/a> nach einem gescheiten Tutorial).<\/p>\n<p>Mit diesem Objekt lassen sich nun auch <a href=\"http:\/\/book.cakephp.org\/2.0\/en\/development\/testing.html#testing-controllers\">typische Mock-Asserts<\/a> generieren:<\/p>\n<pre class=\"brush: php; title: ; notranslate\" title=\"\">$Users-&gt;email-&gt;expects($this-&gt;never())-&gt;method('send');<\/pre>\n<p>Ob es jetzt besser ist, nur den Transport-Layer des CakeEmail-Objekts zu ersetzen oder sich ein dediziertes Mock-Objekt erstellen zu lassen, h\u00e4ngt sicherlich davon ab, was man genau testen will. F\u00fcr einfachere Abfragen wie z.B. ob die Adresse des Empf\u00e4ngers korrekt ist, reicht die erste Variante mit Sicherheit. F\u00fcr komplexere Controller ist die Mock-Variante wahrscheinlich besser geeignet.<\/p>\n<p>Happy Testing!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Im letzten Beitrag habe ich erkl\u00e4rt, wie man einen Controller testen kann, der die neue CakePHP-Klasse &#8222;CakeEmail&#8220; 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?<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[9,5,7],"tags":[],"class_list":["post-94","post","type-post","status-publish","format-standard","hentry","category-cakephp","category-entwicklung","category-php"],"_links":{"self":[{"href":"https:\/\/www.pfft.ch\/wordpress\/wp-json\/wp\/v2\/posts\/94","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.pfft.ch\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.pfft.ch\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.pfft.ch\/wordpress\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.pfft.ch\/wordpress\/wp-json\/wp\/v2\/comments?post=94"}],"version-history":[{"count":6,"href":"https:\/\/www.pfft.ch\/wordpress\/wp-json\/wp\/v2\/posts\/94\/revisions"}],"predecessor-version":[{"id":100,"href":"https:\/\/www.pfft.ch\/wordpress\/wp-json\/wp\/v2\/posts\/94\/revisions\/100"}],"wp:attachment":[{"href":"https:\/\/www.pfft.ch\/wordpress\/wp-json\/wp\/v2\/media?parent=94"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.pfft.ch\/wordpress\/wp-json\/wp\/v2\/categories?post=94"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.pfft.ch\/wordpress\/wp-json\/wp\/v2\/tags?post=94"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}