Класс KernelTestCase
Класс KernelTestCase является базовым классом для тестов,
которым нужен доступ к контейнеру зависимостей Symfony, но не
требуется эмуляция HTTP-запросов. Он загружает ядро приложения
и позволяет получать сервисы через метод getContainer.
Наследники класса получают доступ к static::getContainer,
а также могут переопределить метод createKernel для
указания собственного класса ядра.
Синтаксис
use Symfony\Bundle\FrameworkBundle\Test\KernelTestCase;
class MyTest extends KernelTestCase
{
public function testSomething(): void
{
self::bootKernel();
$container = static::getContainer();
}
}
Пример
Давайте получим сервис из контейнера и проверим его работу:
<?php
namespace App\Tests\Service;
use App\Service\ArticleService;
use Symfony\Bundle\FrameworkBundle\Test\KernelTestCase;
class ArticleServiceTest extends KernelTestCase
{
public function testService(): void
{
self::bootKernel();
$container = static::getContainer();
$service = $container->get(ArticleService::class);
$res = $service->getTitle();
$this->assertSame('article', $res);
}
}
?>
Результат выполнения кода:
"article"
Пример
Давайте переопределим метод createKernel для указания
собственного класса ядра:
<?php
namespace App\Tests;
use App\Kernel;
use Symfony\Bundle\FrameworkBundle\Test\KernelTestCase;
use Symfony\Component\HttpKernel\KernelInterface;
class CustomKernelTest extends KernelTestCase
{
protected static function createKernel(array $options = []): KernelInterface
{
return new Kernel('test', true);
}
public function testEnvironment(): void
{
self::bootKernel();
$container = static::getContainer();
$res = $container->getParameter('kernel.environment');
$this->assertSame('test', $res);
}
}
?>
Результат выполнения кода:
"test"
Пример
Давайте проверим наличие сервиса в контейнере:
<?php
namespace App\Tests;
use App\Service\ArticleService;
use Symfony\Bundle\FrameworkBundle\Test\KernelTestCase;
class ContainerTest extends KernelTestCase
{
public function testHasService(): void
{
self::bootKernel();
$container = static::getContainer();
$res = $container->has(ArticleService::class);
$this->assertTrue($res);
}
}
?>
Результат выполнения кода:
true
Смотрите также
-
класс
WebTestCase,
который добавляет эмуляцию HTTP-запросов -
метод
bootKernel,
который загружает ядро приложения -
метод
getContainer,
который возвращает контейнер зависимостей -
метод
createKernel,
который создаёт экземпляр ядра