Allow mocking otherwise unmockable functions with PHPUnit
PHP
Latest commit c187504 Feb 19, 2017 @lstrojny Make PHP 7 dep explicit
Permalink
Failed to load latest commit information.
build
src/PHPUnit/Extension
tests/PHPUnitTests/Extension Port to PHPUnit 6 Feb 15, 2017
.gitignore
.travis.yml Allow HHVM to fail Feb 19, 2017
README.md
build.xml
composer.json Make PHP 7 dep explicit Feb 19, 2017
phpunit.xml.dist

README.md

PHPUnit function mocker extension

Allows mocking otherwise untestable PHP functions through the use of namespaces.

Gitter Build Status Dependency Status Average time to resolve an issue Percentage of issues still open

<?php
namespace MyNamespace;

class Tool
{
    public function isString($string)
    {
        return strlen($string) > 0 && ctype_alpha($string);
    }
}
<?php

require_once 'PHPUnit/Extension/FunctionMocker.php';

class MyTestCase extends PHPUnit_Framework_TestCase
{
    public function setUp()
    {
        $this->php = PHPUnit_Extension_FunctionMocker::start($this, 'MyNamespace')
            ->mockFunction('strlen')
            ->mockFunction('ctype_alpha')
            ->getMock();
    }

    /** @runInSeparateProcess */
    public function testIsStringUsesStrlenAndCtypeAlpha()
    {
        $this->php
            ->expects($this->once())
            ->method('strlen')
            ->with('foo')
            ->will($this->returnValue(3))
        ;
        $this->php
            ->expects($this->once())
            ->method('ctype_alpha')
            ->with('foo')
            ->will($this->returnValue(false))
        ;

        $tool = new MyNamespace\Tool();
        $this->assertFalse($tool->isString('foo'));
    }
}

NOTE

Use @runInSeparateProcess annotation to make sure that the mocking is reliably working in PHP >=5.4