Метод tearDown
Метод tearDown класса TestCase автоматически вызывается после выполнения каждого тестового метода. Он служит для очистки временных файлов, закрытия соединений, сброса глобальных состояний и других операций, необходимых для поддержания чистоты окружения между тестами. В отличие от setUp, который подготавливает окружение перед тестом, tearDown выполняет завершающие действия.
Синтаксис
<?php
namespace Tests\Unit;
use Tests\TestCase;
class ExampleTest extends TestCase
{
protected function tearDown(): void
{
// Очистка ресурсов
parent::tearDown();
}
}
?>
Метод tearDown не принимает параметров и возвращает void. Для корректной работы всегда следует вызывать родительский метод через parent::tearDown, чтобы гарантировать выполнение стандартных очисток Laravel.
Пример
Давайте создадим тестовый файл в setUp и удалим его в tearDown:
<?php
namespace Tests\Unit;
use Tests\TestCase;
use Illuminate\Support\Facades\Storage;
class FileTest extends TestCase
{
protected function setUp(): void
{
parent::setUp();
Storage::fake('local');
Storage::disk('local')->put('test.txt', 'Hello World');
}
protected function tearDown(): void
{
Storage::disk('local')->delete('test.txt');
parent::tearDown();
}
public function test_file_exists(): void
{
$exists = Storage::disk('local')->exists('test.txt');
$this->assertTrue($exists);
$content = Storage::disk('local')->get('test.txt');
$this->assertEquals('Hello World', $content);
}
}
?>
Результат выполнения теста:
"OK (1 test, 2 assertions)"
Пример
Используем tearDown для очистки глобальной переменной после теста:
<?php
namespace Tests\Unit;
use Tests\TestCase;
class GlobalTest extends TestCase
{
private $backupGlobal;
protected function setUp(): void
{
parent::setUp();
global $appConfig;
$this->backupGlobal = $appConfig;
$appConfig = ['debug' => true, 'version' => '1.0'];
}
protected function tearDown(): void
{
global $appConfig;
$appConfig = $this->backupGlobal;
parent::tearDown();
}
public function test_global_variable(): void
{
global $appConfig;
$this->assertEquals(['debug' => true, 'version' => '1.0'], $appConfig);
$appConfig['debug'] = false;
$this->assertEquals(['debug' => false, 'version' => '1.0'], $appConfig);
}
}
?>
Результат выполнения кода:
"OK (1 test, 2 assertions)"
Пример
Закрываем соединение с базой данных после тестов, использующих отдельное подключение:
<?php
namespace Tests\Unit;
use Tests\TestCase;
use Illuminate\Support\Facades\DB;
class DatabaseTest extends TestCase
{
protected function setUp(): void
{
parent::setUp();
config(['database.default' => 'secondary']);
}
protected function tearDown(): void
{
DB::disconnect('secondary');
parent::tearDown();
}
public function test_database_connection(): void
{
$result = DB::connection('secondary')->select('SELECT 1 as value');
$this->assertCount(1, $result);
$this->assertEquals(1, $result[0]->value);
}
}
?>
Результат выполнения кода:
"OK (1 test, 2 assertions)"
Пример
Очистка кэша и сброс моков после выполнения теста:
<?php
namespace Tests\Unit;
use Tests\TestCase;
use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Facades\Config;
class CacheTest extends TestCase
{
protected function setUp(): void
{
parent::setUp();
Config::set('cache.default', 'array');
}
protected function tearDown(): void
{
Cache::flush();
Config::set('cache.default', env('CACHE_DRIVER', 'file'));
parent::tearDown();
}
public function test_cache_operations(): void
{
Cache::put('user', ['name' => 'John', 'age' => 30], 60);
$user = Cache::get('user');
$this->assertEquals(['name' => 'John', 'age' => 30], $user);
}
}
?>
Результат выполнения кода:
"OK (1 test, 1 assertions)"
Смотрите также
-
класс
TestCase,
базовый класс для всех тестов в Laravel -
метод
setUp,
который подготавливает окружение перед тестом -
трейт
RefreshDatabase,
который автоматически управляет состоянием базы данных -
метод
assertDatabaseHas,
который проверяет наличие записи в базе данных