php-mock/php-mock-prophecy

Mock built-in PHP functions (e.g. time()) with Prophecy. This package relies on PHP's namespace fallback policy. No further extension is needed.


Keywords
testing, BDD, TDD, test, mock, stub, test double, function, prophecy, builtin-functions, php, php-mock
License
WTFPL

Documentation

Mock PHP built-in functions with Prophecy

This package integrates the function mock library PHP-Mock with Prophecy.

Installation

Use Composer:

composer require --dev php-mock/php-mock-prophecy

Usage

Build a new PHPProphet and create function prophecies for a given namespace with PHPProphet::prophesize():

namespace foo;

use phpmock\prophecy\PHPProphet;

$prophet = new PHPProphet();

$prophecy = $prophet->prophesize(__NAMESPACE__);
$prophecy->time()->willReturn(123);
$prophecy->reveal();

assert(123 == time());
$prophet->checkPredictions();

Restrictions

This library comes with the same restrictions as the underlying php-mock:

  • Only unqualified function calls in a namespace context can be prophesized. E.g. a call for time() in the namespace foo is prophesizable, a call for \time() is not.

  • The mock has to be defined before the first call to the unqualified function in the tested class. This is documented in Bug #68541. In most cases you can ignore this restriction. But if you happen to run into this issue you can call PHPProphet::define() before that first call. This would define a side effectless namespaced function.

  • Additionally it shares restrictions from Prophecy as well: Prophecy doesn't support pass-by-reference. If you need pass-by-reference in prophecies, consider using another framework (e.g. php-mock-phpunit).

License and authors

This project is free and under the WTFPL. Responsable for this project is Markus Malkusch markus@malkusch.de.

Donations

If you like this project and feel generous donate a few Bitcoins here: 1335STSwu9hST4vcMRppEPgENMHD2r1REK