Skip to content

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.