Gestern bin ich auf eine interessante Erweiterung für PHPUnit gestoßen, die es erlaubt auch reine Funktionen als Mock-Objekte anzulegen und deren Verhalten damit zu testen: PHP-Mock bzw. dessen Erweiterung für die Nutzung in PHPUnit.
Damit kann man dann sehr bequem auch interne Funktionen testen, z.B. file_get_contents() oder auch ein mail().
Ein so gearteter Test könnte dann z.B. so aussehen:
<?php namespace deimxnetprojecttestunitTests; use phpmockphpunitPHPMock; class BuiltinTest extends PHPUnit_Framework_TestCase { use PHPMock; public function testFileGetContents() { $mock = $this->getFunctionMock(__NAMESPACE__, 'file_get_contents'); $mock->expects(self::once())->willReturn('contents-of-file'); self::assertEquals('contents-of-file', file_get_contents()); } public function testMail() { $mock = $this->getFunctionMock(__NAMESPACE__, 'mail'); $mock->expects(self::once())->with(self::equalTo('example@example.com'), self::isType('Subject'), self::equalTo('Mail body')); self::assertTrue(mail('example@example.com', 'Subject', 'Mail body')); } }