Symfony tesztek

Symfony-ban unit tesztre és funkcionális tesztre nézünk egy-egy példát.

Ebben a unit teszt példában egy service egy funkcióját teszteljük le. A setUp-ban inicializáljuk a mysql és a mongodb kapcsolatunkat, hogy a service függvényünknek átadhassuk paraméterként. A testGenerate függvényben, a megfelelő paraméterek átadásával meghívjuk a funkciónkat. A assertEquals első paramétere lesz az elvárt eredmény ami ha egyezik a második paraméterrel, amit vissza kaptunk a funkciónktól, akkor helyes lesz a teszt:
 
<?php
// testService/ScheduleServiceTest.php
namespace App\tests\Service;

use App\Service\ExampleService;
use PHPUnit\Framework\TestCase;
use Symfony\Bundle\FrameworkBundle\Test\KernelTestCase;
use Doctrine\ODM\MongoDB\DocumentManager as DocumentManager;

class ScheduleServiceTest extends KernelTestCase
{
    /**
     * @var \Doctrine\ORM\EntityManager
     */
    private $entityManager;

    /**
     * @var DocumentManager
     */
    private $documentManager;

    protected function setUp()
    {
        $kernel = self::bootKernel();

        $this->entityManager = $kernel->getContainer()->get('doctrine')->getManager();

        $this->documentManager  = $kernel->getContainer()->get('doctrine_mongodb')->getManager();
    }

    /**
    * @group generate
    */
    public function testGenerate()
    {
        $em = $this->entityManager;
        $dm = $this->documentManager;

        $year = "2019";
        $userId = 1;

        $exampleService = new ExampleService($em, $dm, $year, $userId);
        $result = $exampleService->generate();

        $this->assertEquals("success", $result);
    }
}

Funkcionális tesztre ebben a példában egy listának egy elemét kérdezünk le és ha 200-al sikeresen lefut, akkor jónak számít a teszt.
 
<?php
// tests/Controller/CityControllerTest.php
namespace App\Tests\Controller;

use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;

class CityControllerTest extends WebTestCase
{
    private $client = null;

    public function setUp()
    {
        $this->client = static::createClient();
    }

    public function testShowPost()
    {
        $this->client->request('GET', '/api/city/1');

        $this->assertEquals(200, $this->client->getResponse()->getStatusCode());
    }
}

A .env.test fájlban beállíthatunk teszt adatbázist és akkor nem az éles adatbázisunkat szemeteljük tele.

A következő paranccsal lehet lefuttatni az összes tesztet:
 
# php bin/phpunit

Csak a group annotációval megjelölt csoportba tartozó tesztek futtatása:
# php bin/phpunit --group generate

Egy teszt lefuttatása:
 
# php bin/phpunit --filter testGenerate

Teszt csoportok vagy tesztek listája:
 
# php bin/phpunit --list-tests
# php bin/phpunit --list-groups

Olvasnivaló:
https://symfony.com/doc/current/testing.html
2020.12.12.