1. Go to this page and download the library: Download filisko/testable-functions library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
filisko / testable-functions example snippets
// this is passed to the constructor of the client class
$functions = new \Filisko\Functions();
// filesystem
$functions->file_exists($path);
$functions->is_dir($dirname);
$functions->is_file($filename);
// network
$functions->checkdnsrr($hostname);
$functions->fsockopen($hostname);
// clock
$functions->time();
$functions->date_create();
// ----- inside the PHPUnit test case -----
use PHPUnit\Framework\Assert;
// this is the default value, and it means that
// undefined functions will fall back to their implementation
$failOnMissing = false;
$functions = new \Filisko\FakeFunctions([
// if you don't add it here, it will fallback to PHP
'time' => 1417011228,
'date_create' => new DateTime('2025-05-15'),
'is_dir' => function(string $path) {
// you can assert arguments here
Assert::assertEquals('/path/to/dir', $path);
return false;
},
], $failOnMissing);
$fileManager = new FileManager($functions);
$this->assertEquals(false, $client->do());
// ------- inside the class under test -------
// returns 1417011228
$functions->time();
// returns DateTime('2025-05-15')
$functions->date_create();
// returns false
$functions->is_dir($dirname);
// ---------- inside a PHP Unit test ----------
$functions = new \Filisko\FakeFunctions([
// simulating a file loading global vars
'anything (functions, classes, etc.) from a file
'var now is available
$functions->
/**
* @runInSeparateProcess
* @preserveGlobalState disabled
*/
public function test_with_functions_loading(): void
{
// ...
}
$functions = new \Filisko\FakeFunctions([
// any value (can only be used once, otherwise an exception will be thrown)
'some_function' => true,
// callables (can only be used once, otherwise an exception will be thrown)
'some_function' => function() {
return true;
},
// this will return the same result no matter how many times it's called
'some_function' => new FakeStatic($mixed),
// a stack of values that will be used for each function call
// it throws an exception when the stack is already consumed
'some_function' => new FakeStack([true, false, 1, 2]),
]);
// it's also possible to preset the values using the set() method,
// this allows you to postpone the setting of a function's preset result until it is needed.
$functions->set('some_function', true);
$functions->set('some_function', new FakeStatic($mixed));
$functions->set('some_function', new FakeStack([true, false, 1, 2]));
// We can adjust whether we want to throw an exception when a result for a function is not set,
// yet the function was called anyway (like an unexpected call).
// This configuration defaults to false, which causes a fallback to PHP's native functions when a mock was not set.
// On the other hand, enabling it can be very useful to make sure that only expected calls are made.
// (e.g.: avoid unexpected DB calls in legacy code or external HTTP requests)
$failOnMissing = true;
$functions = new \Filisko\FakeFunctions([
// this is used to fallback to the native implementation
// even though $failOnMissing is enabled (it will fail otherwise)
'mail' => new FakeFallback(),
// if a call is made and not mocked here, it will fail
'other_function' => true
], $failOnMissing);
// returns a bool of whether a function was called or not
$functions->wasCalled('tion call
// this is useful when you want to avoid hardcoding a result just so that you have control over it.
// this way, you let the code run and only get the result of the function to do something more with it (e.g.: an ID)
// e.g.: 'fecbada3-0c27-47ce-addf-f840050ee204'
$functions->lastResult('uuid');
// you can also specify the number of result you want to get starting from the end
// 0 is last (default), 1 is penultimate, etc.
$functions->lastResult('uuid', 1);
// returns an array of string[] of all the echos
$functions->echos();
// returns a bool of whether the string was echoed or not
$functions->wasEchoed('Was I echoed?');
// returns an array of string[] of all the prints
$functions->prints();
// returns a bool of whether the string was printed or not
$functions->wasPrinted('Was I printed?');
// returns a bool of whether die() was called or not
$functions->died();
// returns the die code or string that was passed to die($status)
$functions->dieCode();
// returns a bool of whether exit() was called or not
$functions->exited();
// returns the exit code or string that was passed to exit($status)
$functions->exitCode();
// returns a bool of whether a file was included or not
$functions->wasIncluded('file.php');
// returns a bool of whether a file was included once or not
$functions->wasIncludedOnce('file.php');
// returns a bool of whether a file was
$builder = new MockBuilder();
$builder->setNamespace(__NAMESPACE__)
->setName("time")
->setFunction(
function () {
return 1417011228;
}
);
$mock = $builder->build()
$result = $mock->time();