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.
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.
À 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.
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.
Utilisez mockedFS pour tester différents scénarios, tels que le rapport d'erreurs et la récupération de la taille.
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) } }
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!