Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Allow mocking otherwise unmockable functions with PHPUnit
PHP
branch: master

Merge pull request #5 from ktzouno/master

Adding a comment to make more clear how the FunctionMocker works
latest commit 9a06a1be73
@lstrojny authored
Failed to load latest commit information.
build Build infra
src/PHPUnit/Extension
tests/PHPUnitTests/Extension Making method static
.gitignore Build infra
.travis.yml
README.md Update README.md
build.xml Build infra
composer.json Adding PHP 5.3 as a dep
phpunit.xml.dist Completing blacklisting

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

Something went wrong with that request. Please try again.