chadicus / test-helpers
Classes designed to assist with PHPUnit testing
Installs: 21 891
Dependents: 1
Suggesters: 0
Security: 0
Stars: 1
Watchers: 1
Forks: 1
Open Issues: 2
Requires
- php: ^7.3 || ^8.0
Requires (Dev)
- chadicus/coding-standard: ^2
- phpunit/phpunit: ^9.3
README
Requirements
Test Helpers requires PHP 7.3 (or later).
Composer
To add the library as a local, per-project dependency use Composer! Simply add a dependency on
chadicus/test-helpers
to your project's composer.json
file such as:
composer require --dev chadicus/test-helpers
NOTE: test-helpers should never be used in production. They are meant for testing enviornments only.
Documentation
PHP docs for the project can be found here.
Contact
Developers may be contacted at:
Project Build
With a checkout of the code get Composer in your PATH and run:
composer install
composer run test
composer run lint
\Chadicus\FunctionRegistry
Some internal PHP functions are documented to return certain values on failure. If you're a meticulous programmer you want to account for these return values in your code and respond to them accordingly.
class MyClass { public function doSomething() { $curl = curl_init(); if ($curl === false) { throw new \Exception('curl_init() failed'); } //do something with $curl ... } }
A meticulous programmer may also want to ensure their unit test code coverage is 100%.
One way to accomplish this is to use @codeCoverageIgnore annotations
class MyClass { public function doSomething() { $curl = curl_init(); if ($curl === false) { //@codeCoverageIgnoreStart throw new \Exception('curl_init() failed'); //@codeCoverageIgnoreEnd } //do something with $curl ... } }
This gets us the code coverage but the code isn't really tested.
The FunctionRegistry
class alows you to mock an internal PHP function
class MyClassTest extends \PHPUnit_Framework_TestCase { protected function setUp() { // prepare the curl functions for mocking \Chadicus\FunctionRegistry::reset(__NAMESPACE__, array('curl')); } /** * @expectedExceptionMessage curl_init() failed */ public function testCurlInitFails() { \Chadicus\FunctionRegistry::set( __NAMESPACE__, 'curl_init', function () { return false; } ); $myClass = new MyClass(); // this will call our custom curl_init function $myClass->doSomething(); } }
For functions and constants, PHP will fall back to global functions or constants if a namespaced function or constant does not exist. It is because of this behavior that we can mock internal functions.