Apéndice 1: PhpUnit
PhpUnit es el framework de test por excelencia de PHP. Pertenece a la familia xUnit y con él puedes desarrollar todo tipo de tests.
Instalación
Nos situamos dentro de la carpeta del proyecto, creándola si es necesario:
1 mkdir dojo
2 cd dojo
Dentro del proyecto asumimos la convención de tener las las carpetas src y tests
1 mkdir src
2 mkdir tests
Si no lo hemos hecho antes, iniciamos el proyecto mediante composer init y como primera dependencia requerimos phpunit.
1 composer init
2 # Fill in with the data needed
3 composer require --dev phpunit/phpunit
Por último, configuraremos los namespaces del proyecto en composer.json, que quedará más o menos así:
1 {
2 "name": "talkingbit/dojo",
3 "description": "A simple space to practice testing",
4 "minimum-stability": "dev",
5 "license": "MIT",
6 "type": "library",
7 "config": {
8 "bin-dir": "bin"
9 },
10 "authors": [
11 {
12 "name": "Fran Iglesias",
13 "email": "franiglesiad@mac.com"
14 }
15 ],
16 "require-dev": {
17 "phpunit/phpunit": "^7.4@dev"
18 },
19 "autoload": {
20 "psr-4": {
21 "TalkingBit\\Dojo\\": "src/"
22 }
23 },
24 "autoload-dev": {
25 "psr-4": {
26 "Tests\\TalkingBit\\Dojo\\": "tests/"
27 }
28 }
29 }
También hemos añadido la clave config, con bin-dir, de este modo, los paquetes como phpunit y otros crearán un alias de su ejecutable en la carpeta bin, con lo que podremos lanzarlos fácilmente con bin/phpunit.
Después de este cambio puedes hacer un composer install o un composer dump-autoload, para ponerte en marcha.
1 composer install
Configuración básica
phpunit necesita un poco de configuración, así que vamos a prepararla ejecutando lo siguiente. Es un interactivo y normalmente nos servirán las respuestas por defecto.
1 bin/phpunit --generate-configuration
Esto generará un archivo de configuración por defecto phpunit.xml (más información en este artículo). Normalmente hago un pequeño cambio para poder tener medida de cobertura en cualquier código y no tener que pedir explícitamente en cada test, poniendo el parámetro forceCoversAnnotation a false:
1 <?xml version="1.0" encoding="UTF-8"?>
2 <phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3 xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/7.4/phpunit.xsd"
4 bootstrap="vendor/autoload.php"
5 forceCoversAnnotation="false"
6 beStrictAboutCoversAnnotation="true"
7 beStrictAboutOutputDuringTests="true"
8 beStrictAboutTodoAnnotatedTests="true"
9 verbose="true">
10 <testsuites>
11 <testsuite name="default">
12 <directory suffix="Test.php">tests</directory>
13 </testsuite>
14 </testsuites>
15
16 <filter>
17 <whitelist processUncoveredFilesFromWhitelist="true">
18 <directory suffix=".php">src</directory>
19 </whitelist>
20 </filter>
21 </phpunit>
Si es necesario, añadimos el control de versiones:
1 git init
Y con esto, podemos empezar.