PHP - jak testovat pomocí PHPUnit
Bohužel se na českém webu nenachází žádný strohý článek s praktickým příkladem, jak základně a napřímo použít k testování PHP aplikací framework PHPUnit. Našel jsem jen obsáhlejší návod jak používat PHPUnit v PhpStormu (a ten každý nemá) a pak ještě s použitím frameworku Codeception (to nechci).
Jak tedy na to? V tomto článku se na to podíváme pěkně stručně včetně příkladu použití bez zbytečné omáčky okolo...
Příklad PHPUnit s Nette
Nainstalujeme phpunit přes composer
composer require --dev phpunit/phpunit
Vytvoříme soubor tests/ParserTest.php, který bude testovat soubor App\Model\Parser.php viz github
První kontrola
Budeme chtít ověřit, zda metoda getParts() vrátí null, když SimpleXMLElement $parts neobsahuje požadovaná data a pak zda vrátí pole, když obdrží požadovaná data:
public function testGetParts()
{
$parser = new Parser();
$this->assertNull($parser->getParts(new \SimpleXMLElement("<parts> </parts>")), 'assert is null');
$this->assertIsArray($parser->getParts(new \SimpleXMLElement("<parts> <part> <item> </item> </part> </parts>")), 'assert is array');
}
Spustíme první phpunit test
./vendor/bin/phpunit tests/ParserTest.php
PHPUnit 10.0.15 by Sebastian Bergmann and contributors.
Runtime: PHP 8.1.2-1ubuntu2.11
. 1 / 1 (100%)
Time: 00:00.003, Memory: 6.00 MB
OK (1 test, 1 assertion)
Tento test vrátil OK, takže proběhl bez chyb.
Resumé
Doporučuji si nyní přečíst více článků o PHPUnit, toto je opravdu minimalistický úvod.
Dále je vhodné získat přehled o dalších assertech, protože je jich opravdu hodně:
- assertFalse
- assertTrue
- assertContains
- assertNull
- assertIsArray
- assertSame
- assertEquals
- assertNotEquals
- assertEmpty
- assertLessThan
- assertGreaterThan
- assertInstanceOf
- assertIsBool
- assertFileExists
- assertDirectoryExists
- assertDirectoryIsReadable
- a mnoho dalších
Možné chyby
Při použití PHPUnit se můžeme setkat např. s chybou:
Error: Class "App\Model\Parser" not found
Tu opravíme pomocí require či autoloaderem:
require __DIR__ . "/../app/model/Parser.php";
Odkazy
Video o testování Jakub Filla - testovaní Nette aplikací pomocí PHPUnit