Maison > développement back-end > Golang > Comment simuler efficacement les interactions du système de fichiers pour les tests unitaires Go ?

Comment simuler efficacement les interactions du système de fichiers pour les tests unitaires Go ?

Mary-Kate Olsen
Libérer: 2024-12-16 20:30:12
original
231 Les gens l'ont consulté

How to Effectively Mock Filesystem Interactions for Go Unit Testing?

Tests de système de fichiers simulés dans Go

Introduction

Les fonctions de tests unitaires qui interagissent avec le système de fichiers nécessitent souvent de se moquer du système de fichiers pour fournir une entrée contrôlée et vérifier ce qui est attendu sorties.

Détails de mise en œuvre

Interface et fichier simulés Types

Pour simuler le système de fichiers, définissez une interface, fileSystem, qui déclare des méthodes pour les opérations sur les fichiers telles que l'ouverture et l'accès aux informations sur les fichiers, et créez un type concret, osFS, qui implémente cette interface pour les interactions réelles du système de fichiers.

Fonction de test

À titre d'exemple, considérons getSize(name string), qui renvoie la taille d'un fichier étant donné son nom en utilisant fs.Stat(name) pour file informations.

Configuration du système de fichiers simulé

Dans le code de test, remplacez la variable globale fs par un mockedFS simulé qui hérite du système de fichiers et fournit un comportement contrôlé. Vous pouvez spécifier si les erreurs doivent être signalées et la taille à renvoyer par Stat.

Code de test

Utilisez mockedFS pour tester différents scénarios, tels que le rapport d'erreurs et la récupération de la taille.

Exemple de code de test

type mockedFS struct {
    osFS
    reportErr  bool
    reportSize int64
}

func (m mockedFS) Stat(name string) (os.FileInfo, error) {
    if m.reportErr {
        return nil, os.ErrNotExist
    }
    return mockedFileInfo{size: m.reportSize}, nil
}

func TestGetSize(t *testing.T) {
    oldFs := fs
    mfs := &mockedFS{}
    fs = mfs
    defer func() { fs = oldFs }()

    mfs.reportErr = true
    if _, err := getSize("hello.go"); err == nil {
        t.Error("Expected error, but err is nil!")
    }

    mfs.reportErr = false
    mfs.reportSize = 123
    if size, err := getSize("hello.go"); err != nil {
        t.Errorf("Expected no error, got: %v", err)
    } else if size != 123 {
        t.Errorf("Expected size %d, got: %d", 123, size)
    }
}
Copier après la connexion

Conclusion

En créant un système de fichiers simulé interface, vous pouvez contrôler le comportement des interactions du système de fichiers pendant les tests unitaires, vous permettant de tester en profondeur le code qui repose sur les opérations du système de fichiers.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal