Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/php-mock/php-mock-phpunit
Mock built-in PHP functions (e.g. time() or rand()) in PHPUnit.
https://github.com/php-mock/php-mock-phpunit
builtin-functions mock php php-mock phpunit
Last synced: 1 day ago
JSON representation
Mock built-in PHP functions (e.g. time() or rand()) in PHPUnit.
- Host: GitHub
- URL: https://github.com/php-mock/php-mock-phpunit
- Owner: php-mock
- License: wtfpl
- Created: 2015-04-01T21:28:25.000Z (almost 10 years ago)
- Default Branch: master
- Last Pushed: 2024-06-07T20:50:52.000Z (8 months ago)
- Last Synced: 2025-01-24T17:12:38.917Z (8 days ago)
- Topics: builtin-functions, mock, php, php-mock, phpunit
- Language: PHP
- Homepage:
- Size: 175 KB
- Stars: 166
- Watchers: 4
- Forks: 18
- Open Issues: 5
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
[![.github/workflows/tests.yml](https://github.com/php-mock/php-mock-phpunit/actions/workflows/tests.yml/badge.svg)](https://github.com/php-mock/php-mock-phpunit/actions/workflows/tests.yml)
# Mock PHP built-in functions with PHPUnit
This package integrates the function mock library
[PHP-Mock](https://github.com/php-mock/php-mock) with PHPUnit.## Installation
Use [Composer](https://getcomposer.org/):
```sh
composer require --dev php-mock/php-mock-phpunit
```## Usage
PHP-Mock integrates with the trait
[`PHPMock`](http://php-mock.github.io/php-mock-phpunit/api/class-phpmock.phpunit.PHPMock.html)
into your PHPUnit test case. This trait extends the framework
by the method
[`getFunctionMock()`](http://php-mock.github.io/php-mock-phpunit/api/class-phpmock.phpunit.PHPMock.html#_getFunctionMock).
With this method you can build a mock in the way you are used to build a
PHPUnit mock:```php
namespace foo;class BuiltinTest extends \PHPUnit\Framework\TestCase
{use \phpmock\phpunit\PHPMock;
public function testTime()
{
$time = $this->getFunctionMock(__NAMESPACE__, "time");
$time->expects($this->once())->willReturn(3);$this->assertEquals(3, time());
}public function testExec()
{
$exec = $this->getFunctionMock(__NAMESPACE__, "exec");
$exec->expects($this->once())->willReturnCallback(
function ($command, &$output, &$return_var) {
$this->assertEquals("foo", $command);
$output = ["failure"];
$return_var = 1;
}
);exec("foo", $output, $return_var);
$this->assertEquals(["failure"], $output);
$this->assertEquals(1, $return_var);
}
}
```There's no need to disable the mocked function. The PHPUnit integration does
that for you.### Restrictions
This library comes with the same restrictions as the underlying
[`php-mock`](https://github.com/php-mock/php-mock#requirements-and-restrictions):* Only *unqualified* function calls in a namespace context can be mocked.
E.g. a call for `time()` in the namespace `foo` is mockable,
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](https://bugs.php.net/bug.php?id=68541).
In most cases you can ignore this restriction. But if you happen to run into
this issue you can call [`PHPMock::defineFunctionMock()`](http://php-mock.github.io/php-mock-phpunit/api/class-phpmock.phpunit.PHPMock.html#_defineFunctionMock)
before that first call (e.g. with `@beforeClass`).
This would define a side effectless namespaced function. Another effective
approach is running your test in an isolated process (e.g. with `@runInSeparateProcess`).## License and authors
This project is free and under the WTFPL.
Responsable for this project is Markus Malkusch [email protected].### Donations
If you like this project and feel generous donate a few Bitcoins here:
[1335STSwu9hST4vcMRppEPgENMHD2r1REK](bitcoin:1335STSwu9hST4vcMRppEPgENMHD2r1REK)