


Wie kann man Dateisysteminteraktionen für Go-Unit-Tests effektiv verspotten?
Dec 16, 2024 pm 08:30 PMVerspottete Dateisystemtests in Go
Einführung
Unit-Testfunktionen, die mit dem Dateisystem interagieren, erfordern oft das Verspotten des Dateisystems, um kontrollierte Eingaben bereitzustellen und die Erwartungen zu überprüfen Ausgaben.
Implementierungsdetails
Mocked Interface und File Typen
Um das Dateisystem zu verspotten, definieren Sie eine Schnittstelle, fileSystem, die Methoden für Dateioperationen wie das Öffnen und Zugreifen auf Dateiinformationen deklariert, und erstellen Sie einen konkreten Typ, osFS, der diese Schnittstelle für tatsächliche Dateisysteminteraktionen implementiert.
Testfunktion
Betrachten Sie als Beispiel getSize(name string), das mithilfe von fs.Stat(name) die Größe einer Datei zurückgibt, deren Name angegeben ist Dateiinformationen.
Mocked Filesystem Setup
Ersetzen Sie beim Testen von Code die globale FS-Variable durch ein simuliertes MockedFS, das vom Dateisystem erbt und kontrolliertes Verhalten bietet. Sie können angeben, ob Fehler gemeldet werden sollen und welche Größe von Stat zurückgegeben werden soll.
Testcode
Verwenden Sie mockedFS, um verschiedene Szenarios zu testen, z. B. Fehlerberichterstattung und Größenabruf.
Beispieltestcode
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) } }
Fazit
Durch die Erstellung eines simulierten Dateisystems Mit der Schnittstelle können Sie das Verhalten von Dateisysteminteraktionen während Unit-Tests steuern und so Code, der auf Dateisystemvorgängen basiert, gründlich testen.
Das obige ist der detaillierte Inhalt vonWie kann man Dateisysteminteraktionen für Go-Unit-Tests effektiv verspotten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heißer Artikel

Hot-Tools-Tags

Heißer Artikel

Heiße Artikel -Tags

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

GO Language Pack Import: Was ist der Unterschied zwischen Unterstrich und ohne Unterstrich?

Wie schreibe ich Scheinobjekte und Stubs zum Testen in Go?

Wie kann ich kurzfristige Informationsübertragung zwischen Seiten im BeEGO-Framework implementieren?

Wie kann ich benutzerdefinierte Typ -Einschränkungen für Generika in Go definieren?

Wie kann ich Tracing -Tools verwenden, um den Ausführungsfluss meiner GO -Anwendungen zu verstehen?

Wie schreibe ich Dateien in Go Language bequem?

Wie kann ich Linter und statische Analyse -Tools verwenden, um die Qualität und Wartbarkeit meines GO -Codes zu verbessern?

Wie konvertieren Sie die Liste der MySQL -Abfrageergebnisse in eine benutzerdefinierte Struktur -Slice in Go -Sprache?
