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'));
}
}