仮想ファイルシステム(VFS)は、一時的なファイルのクリーニングの手間を避けて、ユニットテストでファイルシステム操作をシミュレートします。この記事では、PHPユニットテストでのファイルシステム操作のテストを簡素化するためにvfsStream
ライブラリを使用する方法について説明します。
まず、ファイルを作成するための単純なFileCreator
クラスがあります:
<?php namespace App\Tests; class FileCreator extends PHPUnit_Framework_TestCase { public static function create($path, $name, $content) { $filename = rtrim($path, '/') . '/' . $name; return file_put_contents($filename, $content) !== false; } }
従来の方法では、setUp()
メソッドに一時ディレクトリを設定し、tearDown()
メソッドで一時ファイルをクリーニングする必要があります:
<?php namespace App\Tests; class FileCreatorTest extends PHPUnit_Framework_TestCase { protected $path; public function setUp() { $this->path = sys_get_temp_dir(); } public function tearDown() { $file = $this->path . '/test.txt'; if (file_exists($file)) { unlink($file); } } public function testCreate() { $this->assertTrue(FileCreator::create($this->path, 'test.txt', 'Lorem ipsum')); $this->assertFileExists($this->path . '/test.txt'); } }
この方法は、複数のファイルまたはテスト割り込みを処理するときにエラーが発生しやすいです。
これらの問題を回避するには、 vfsStream
を使用します。まず、Composerを使用してインストールします
composer require mikey179/vfsStream
<?php use org\bovigo\vfs\vfsStream; class FileCreatorTest extends PHPUnit_Framework_TestCase { protected $vfs; public function setUp() { $this->vfs = vfsStream::setup('testDirectory'); } public function testCreate() { $path = vfsStream::url('testDirectory'); $this->assertTrue(FileCreator::create($path, 'test.txt', 'Lorem ipsum')); $this->assertFileExists($this->vfs->getChild('test.txt')->url()); } }
手動クリーニングなしですべての操作がメモリ内で実行される仮想ファイルシステムを作成しました。テストが完了すると、仮想ファイルシステムが自動的に破壊されます。 vfsStream::setup()
許可制御、ファイルサイズ制御、複雑なディレクトリ構造シミュレーションなど、より強力な機能を提供します。 この方法は、テストの一時的なファイルクリーニングの失敗によって引き起こされる問題を回避し、テストの信頼性を向上させます。 vfsStream
にアクセスできないため、画像を表示できないことに注意する必要があります。 有効な画像リンクが提供されている場合は、出力に含めます。 /uploads/20250214/173949279267ae8db8e54d6.webp
以上がテスト中の手間のかからないファイルシステム操作?はい、お願いします!の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。