Testy
Testy jsou připraveny. Jen je psát a spouštět. Jsou uloženy ve vytvářené struktuře adresářů dle logiky CMS a projektu v adresáři /tests.
Spuštění testů
./phpunit
Příklad výstupu:
PHPUnit 11.5.0 by Sebastian Bergmann and contributors.
.............. 14 / 14 (100%)
Time: 00:02.018, Memory: 4.00 MB
OK (14 tests, 14 assertions)
Spuštění jednotlivých testů
Lze spouštět jednotlivé testy ve tvém IDE nebo přes příkazový řádek:
./vendor/bin/phpunit tests/path/to/TestFile.php
./vendor/bin/phpunit tests/path/to/TestFile.php::MethodName
Struktura testů
Testy zrcadlí strukturu /core adresáře:
tests/
├── Core/
│ ├── ArrayTest.php
│ ├── CacheTest.php
│ ├── IpTest.php
│ ├── Database/
│ │ ├── DBTest.php
│ │ ├── DBSetTest.php
│ │ ├── DBSpecialCasesTest.php
│ │ └── DBPrepareExecuteTest.php
│ └── Dir/
│ ├── DirTest.php
│ ├── FileInfoTest.php
│ ├── FileSystemTest.php
│ ├── FileTest.php
│ └── FilesTest.php
└── Utils/
└── DatabaseTestCase.php
Psaní testů
Jednoduchý test
<?php
declare(strict_types=1);
namespace Petrovo\Tests;
use PHPUnit\Framework\TestCase;
class MyClassTest extends TestCase
{
public function testBasicExample(): void
{
$this->assertTrue(true);
}
public function testAddition(): void
{
$this->assertEquals(4, 2 + 2);
}
}
Test s databází
Pokud potřebujete databázi, rozšiřte třídu DatabaseTestCase:
<?php
declare(strict_types=1);
namespace Petrovo\Tests;
use Petrovo\Tests\DatabaseTestCase;
class MyDatabaseTest extends DatabaseTestCase
{
public function testDatabaseQuery(): void
{
// Databáze je automaticky dostupná
// Změny se vrátí po testu (rollback transakce)
$result = DB::var("SELECT COUNT(*) FROM users");
$this->assertIsInt($result);
}
}
Generování testů
Se psaním testů pomůže: - ChatGPT - Placená přímá integrace OpenAI API volaná z IDE - IDE integrované nástroje
Fixtures a Test Data
Projektu k dispozici knihovna Faker pro generování testovacích dat:
<?php
use Faker\Factory;
$faker = Factory::create('cs_CZ');
$name = $faker->name();
$email = $faker->email();
$phone = $faker->phoneNumber();
$city = $faker->city();
Assertions
Základní assertion metody:
$this->assertTrue($condition);
$this->assertFalse($condition);
$this->assertEquals($expected, $actual);
$this->assertNotEquals($expected, $actual);
$this->assertSame($expected, $actual);
$this->assertNull($value);
$this->assertIsArray($value);
$this->assertIsString($value);
$this->assertIsInt($value);
$this->assertStringContains($needle, $haystack);
$this->assertThrows(Exception::class, function() { /* ... */ });
PHPUnit konfigurace
Konfigurace je v phpunit.xml.
Continuous Integration
Při commitu se doporučuje spustit testy a ověřit, že všechny projdou.