Maison > développement back-end > Golang > Comment se moquer du système de fichiers pour les tests unitaires dans Golang ?

Comment se moquer du système de fichiers pour les tests unitaires dans Golang ?

Susan Sarandon
Libérer: 2024-12-27 11:09:11
original
305 Les gens l'ont consulté

How to Mock the Filesystem for Unit Testing in Golang?

Exemple de code pour tester le système de fichiers dans Golang

Le système de fichiers est un composant essentiel de toute application qui gère des données basées sur des fichiers. Pour garantir le bon comportement des opérations du système de fichiers, les tests unitaires jouent un rôle crucial. Golang fournit un mécanisme pour simuler le système de fichiers pendant les tests, permettant aux développeurs d'isoler le comportement de leur code du système de fichiers réel.

Pour simuler le système de fichiers, vous pouvez créer une interface qui représente les opérations du système de fichiers. Cette interface peut ensuite être implémentée par un système de fichiers fictif qui renvoie des réponses contrôlées lors des tests.

Voici un exemple d'une telle interface :

type fileSystem interface {
    Open(name string) (file, error)
    Stat(name string) (os.FileInfo, error)
}

type file interface {
    io.Closer
    io.Reader
    io.ReaderAt
    io.Seeker
    Stat() (os.FileInfo, error)
}
Copier après la connexion

Pour utiliser cette interface dans un test, vous peut créer un système de fichiers fictif qui implémente l'interface fileSystem :

type mockFileSystem struct {
    err error
    fileInfo os.FileInfo
}

func (m mockFileSystem) Open(name string) (file, error) {
    return nil, m.err
}

func (m mockFileSystem) Stat(name string) (os.FileInfo, error) {
    return m.fileInfo, m.err
}
Copier après la connexion

Ce système de fichiers fictif peut être utilisé pour contrôler le comportement du système de fichiers pendant les tests en définissant l'erreur et fileInfo.

Voici un exemple de fonction de test qui utilise le système de fichiers fictif :

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

    fs = mockFileSystem{fileInfo: &os.FileInfo{Size: 123}}

    size, err := getSize("hello.go")

    if err != nil {
        t.Errorf("Expected no error, got: %v", err)
    }

    if size != 123 {
        t.Errorf("Expected size %d, got: %d", 123, size)
    }
}
Copier après la connexion

Dans la fonction de test, le système de fichiers d'origine est enregistré et remplacé par le fichier fictif. système. Le système de fichiers fictif est configuré pour renvoyer un fichier d'une taille de 123. Le test appelle ensuite la fonction getSize, qui est censée renvoyer la taille du fichier. Le test réussit si la fonction getSize renvoie la bonne taille et aucune erreur.

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