Maison >développement back-end >tutoriel php >Opérations de système de fichiers sans tracas pendant les tests? Oui s'il vous plait!

Opérations de système de fichiers sans tracas pendant les tests? Oui s'il vous plait!

William Shakespeare
William Shakespeareoriginal
2025-02-14 09:50:12325parcourir

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.

Hassle-Free Filesystem Operations during Testing? Yes Please!

Hassle-Free Filesystem Operations during Testing? Yes Please!

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn