Метод createKernel
Метод createKernel принадлежит классу
KernelTestCase и создаёт экземпляр
ядра приложения. Метод объявлен как
protected static и возвращает объект,
реализующий интерфейс KernelInterface.
Параметров метод не принимает.
При переопределении в собственном тесте
метод позволяет указать собственный класс
ядра, окружение и режим отладки.
Синтаксис
protected static function createKernel(array $options = []): KernelInterface
Пример
Давайте создадим тест, который наследуется
от KernelTestCase и получает контейнер
через метод getContainer, не переопределяя
createKernel:
<?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);
$this->assertInstanceOf(ArticleService::class, $service);
}
}
?>
Результат выполнения кода:
"OK (1 test, 1 assertion)"
Пример
Давайте переопределим метод createKernel,
чтобы запустить приложение в окружении
'test' с включённой отладкой:
<?php
namespace App\Tests\Service;
use App\Kernel;
use App\Service\ArticleService;
use Symfony\Bundle\FrameworkBundle\Test\KernelTestCase;
use Symfony\Component\HttpKernel\KernelInterface;
class ArticleServiceTest extends KernelTestCase
{
protected static function createKernel(array $options = []): KernelInterface
{
return new Kernel('test', true);
}
public function testService(): void
{
self::bootKernel();
$container = static::getContainer();
$service = $container->get(ArticleService::class);
$this->assertInstanceOf(ArticleService::class, $service);
}
}
?>
Результат выполнения кода:
"OK (1 test, 1 assertion)"
Пример
Давайте переопределим метод createKernel
и вернём ядро с отключённой отладкой:
<?php
namespace App\Tests\Service;
use App\Kernel;
use Symfony\Bundle\FrameworkBundle\Test\KernelTestCase;
use Symfony\Component\HttpKernel\KernelInterface;
class ArticleServiceTest extends KernelTestCase
{
protected static function createKernel(array $options = []): KernelInterface
{
return new Kernel('test', false);
}
public function testEnvironment(): void
{
self::bootKernel();
$kernel = static::$kernel;
$environment = $kernel->getEnvironment();
$this->assertSame('test', $environment);
}
}
?>
Результат выполнения кода:
"OK (1 test, 1 assertion)"
Пример
Давайте проверим, что метод createKernel
возвращает именно тот класс ядра, который
указан в проекте:
<?php
namespace App\Tests;
use App\Kernel;
use Symfony\Bundle\FrameworkBundle\Test\KernelTestCase;
use Symfony\Component\HttpKernel\KernelInterface;
class KernelTest extends KernelTestCase
{
protected static function createKernel(array $options = []): KernelInterface
{
return new Kernel('test', true);
}
public function testKernelInstance(): void
{
$kernel = static::createKernel();
$this->assertInstanceOf(Kernel::class, $kernel);
}
}
?>
Результат выполнения кода:
"OK (1 test, 1 assertion)"
Смотрите также
-
класс
KernelTestCase,
который является базовым классом для тестов ядра -
метод
bootKernel,
который загружает ядро приложения в тесте -
метод
getContainer,
который возвращает контейнер внедрения зависимостей -
класс
WebTestCase,
который расширяет KernelTestCase для функциональных тестов