PHPUnit
This is the getting started tutorial on PHPUnit.
PHPUnit is a unit testing framework and was created by Sebastian Bergmann and its development is hosted on GitHub.
In order to learn PHPUnit it is assumed that you are familiar with PHP and Object Oriented Programming in PHP.
Following are the list of things required to follow this tutorial.
Optional
Lets get started.
Lets begin our journey by first creating a project folder in our localhost and name this as phpunit.
Now move inside this project folder and require phpunit using composer.
Composer is a PHP dependency manager.
Use the following command in terminal to get phpunit in your project.
$ composer require phpunit/phpunit
Output
YUSUF-MacBook-Pro:phpunit yusufshakeel$ composer require phpunit/phpunit Using version ^5.7 for phpunit/phpunit ./composer.json has been created Loading composer repositories with package information Updating dependencies (including require-dev) Package operations: 25 installs, 0 updates, 0 removals - Installing symfony/yaml (v3.2.7) Downloading: 100% - Installing sebastian/version (2.0.1) Loading from cache - Installing sebastian/resource-operations (1.0.0) Loading from cache - Installing sebastian/recursion-context (2.0.0) Loading from cache - Installing sebastian/object-enumerator (2.0.1) Loading from cache - Installing sebastian/global-state (1.1.1) Loading from cache - Installing sebastian/exporter (2.0.0) Loading from cache - Installing sebastian/environment (2.0.0) Loading from cache - Installing sebastian/diff (1.4.1) Loading from cache - Installing sebastian/comparator (1.2.4) Loading from cache - Installing doctrine/instantiator (1.0.5) Loading from cache - Installing phpunit/php-text-template (1.2.1) Loading from cache - Installing phpunit/phpunit-mock-objects (3.4.3) Loading from cache - Installing phpunit/php-timer (1.0.9) Loading from cache - Installing phpunit/php-file-iterator (1.4.2) Loading from cache - Installing sebastian/code-unit-reverse-lookup (1.0.1) Loading from cache - Installing phpunit/php-token-stream (1.4.11) Loading from cache - Installing phpunit/php-code-coverage (4.0.8) Downloading: 100% - Installing webmozart/assert (1.2.0) Loading from cache - Installing phpdocumentor/reflection-common (1.0) Loading from cache - Installing phpdocumentor/type-resolver (0.2.1) Loading from cache - Installing phpdocumentor/reflection-docblock (3.1.1) Loading from cache - Installing phpspec/prophecy (v1.7.0) Loading from cache - Installing myclabs/deep-copy (1.6.1) Downloading: 100% - Installing phpunit/phpunit (5.7.19) Downloading: 100% symfony/yaml suggests installing symfony/console (For validating YAML files using the lint command) sebastian/global-state suggests installing ext-uopz (*) phpunit/phpunit suggests installing phpunit/php-invoker (~1.1) Writing lock file Generating autoload files YUSUF-MacBook-Pro:phpunit yusufshakeel$
After installing composer our project folder will look like the following.
Open terminal and run the following command to check if phpunit is running properly.
$ ./vendor/bin/phpunit
YUSUF-MacBook-Pro:phpunit yusufshakeel$ ./vendor/bin/phpunit PHPUnit 5.7.19 by Sebastian Bergmann and contributors.
There will be more lines printed in the terminal. I have skipped those lines. If you are able to get the above line which says the version and author of PHPUnit then it is installed.
Now inside our project folder we will go ahead and create a test folder. This will hold all our test files.
So, run the following command in the terminal to create a test folder.
$ mkdir test
Now inside the project folder we will create an app folder. Inside this folder we are going to keep all the application code.
$ mkdir app
Open the composer.json file and add the following lines.
{ "require": { "phpunit/phpunit": "^5.7" }, "autoload": { "psr-4": { "App\\": "app" } } }
We have added the autoload part which means we want to load our code from the app directory.
autoload
app
And now we will run the dump-autoload command in the terminal to update the autoloader of composer.
dump-autoload
$ composer dump-autoload -o
YUSUF-MacBook-Pro:phpunit yusufshakeel$ composer dump-autoload -o Generating optimized autoload files YUSUF-MacBook-Pro:phpunit yusufshakeel$
Now we will configure phpunit to run the test for us from given location. So, we will create a phpunit.xml file inside our project folder and write the following code in it.
<?xml version="1.0" encoding="UTF-8"?> <phpunit bootstrap="vendor/autoload.php" stopOnFailure="true" colors="true" verbose="true"> <testsuites> <testsuite name="My Test Suite"> <directory>test</directory> </testsuite> </testsuites> </phpunit>
So, we have defined some configurations for PHPUnit.
We are bootstrapping vender/autoload.php file. This will be loaded before our tests run. We want to stop PHPUnit execution on failure. We want PHPUnit to use colors to highlight output. And we want verbose output from PHPUnit.
vender/autoload.php
We have also defined a test suite and named it My Test Suite and we want to run tests from the test directory.
And now if we run the phpunit test we will get the following output.
Lets write some tests in the next tutorial.
Have fun :-)