Maison >développement back-end >tutoriel php >Opérations de système de fichiers sans tracas pendant les tests? Oui s'il vous plait!
Le système de fichiers virtuel (VFS) simule les opérations du système de fichiers dans les tests unitaires, en évitant les tracas du nettoyage des fichiers temporaires. Cet article décrit comment utiliser la bibliothèque vfsStream
pour simplifier les tests des opérations du système de fichiers dans les tests unitaires PHP.
Tout d'abord, nous avons une classe FileCreator
simple pour créer des fichiers:
<code class="language-php"><?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; } }</code>
La méthode traditionnelle nécessite de définir un répertoire temporaire dans la méthode setUp()
et de nettoyer les fichiers temporaires dans la méthode tearDown()
:
<code class="language-php"><?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'); } }</code>
Cette méthode est sujette à des erreurs lors de la gestion de plusieurs fichiers ou des interruptions de test.
Utilisez vfsStream
pour éviter ces problèmes. Tout d'abord, utilisez le compositeur pour installer:
<code class="language-bash">composer require mikey179/vfsStream</code>
Ensuite, modifiez la classe de test:
<code class="language-php"><?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()); } }</code>
vfsStream::setup()
a créé un système de fichiers virtuel où toutes les opérations sont effectuées en mémoire sans nettoyage manuel. Une fois le test terminé, le système de fichiers virtuel sera automatiquement détruit.
vfsStream
fournit des fonctionnalités plus puissantes telles que le contrôle de l'autorisation, le contrôle de la taille du fichier et la simulation de structure de répertoire complexe. Cette méthode évite les problèmes causés par la défaillance temporaire du nettoyage des fichiers dans les tests et améliore la fiabilité du test.
Il convient de noter que le lien d'image d'origine /uploads/20250214/173949279267ae8db8e54d6.webp
ne peut pas être accessible, donc l'image ne peut pas être affichée. Si un lien d'image valide est fourni, je l'inclure dans la sortie.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!