Creare unit test in PHP con PHPUnit
PHPUnit è una delle librerie, se non la libreria, più usata per creare unit test in PHP.
In questo articolo vediamo un paio di esempi di utilizzo.
Io ho usato composer per l'installazione, nel primo esempio non usiamo namespace, ed abbiamo un composer.json tipo questo:
{
"require": {},
"require-dev": {
"phpunit/phpunit": "^9.6.29"
},
"autoload": {
"classmap": [
"."
]
}
}
Il classmap ci dice dove sono le classi da testare; impostato così cerca dalla root in poi.
Date questo comando dopo aver settato il parametro:
composer dump-autoload
Questa la classe da testare:
class Calculator {
public function add(int $a, int $b): int {
return $a + $b;
}
}
Questo il test (tests/CalculatorTest.php):
use PHPUnit\Framework\TestCase;
class CalculatorTest extends TestCase {
public function testAdd(): void {
$calc = new Calculator();
$result = $calc->add(2, 3);
$this->assertEquals(5, $result);
}
}
Per lanciare il test:
/vendor/bin/phpunit /tests/CalculatorTest.php
Se invece usiamo in namespace possiamo modificare il composer.json così:
{
"require": {},
"require-dev": {
"phpunit/phpunit": "^9.6.29"
},
"autoload": {
"psr-4": {
"controllers\\": "controllers/"
}
}
}
A questo la classe da testare:
namespace controllers;
class Calculator {
public function add(int $a, int $b): int {
return $a + $b;
}
}
E questo il test:
use controllers\Calculator;
use PHPUnit\Framework\TestCase;
class CalculatorTest extends TestCase {
public function testAdd(): void {
$calc = new Calculator();
$result = $calc->add(2, 3);
$this->assertEquals(5, $result);
}
}
Si lancia come prima, e ricordatevi di rilanciare il comando composer se avete fatto modifiche.
Tips aggiuntivo: se volete avere un file di configurazione dove mettere le varie opzioni di PHPUnit potete creare nella root un file phpunit.xml.
Ad esempio:
<?xml version="1.0" encoding="UTF-8"?>
<phpunit bootstrap="vendor/autoload.php"
colors="true"
verbose="true">
<testsuites>
<testsuite name="Application Test Suite">
<directory>tests</directory>
</testsuite>
</testsuites>
</phpunit>
Enjoy!
php composer phpunit unit test
Commentami!