Heim > Backend-Entwicklung > Golang > Wie kann man Dateisysteminteraktionen für Go-Unit-Tests effektiv verspotten?

Wie kann man Dateisysteminteraktionen für Go-Unit-Tests effektiv verspotten?

Mary-Kate Olsen
Freigeben: 2024-12-16 20:30:12
Original
232 Leute haben es durchsucht

How to Effectively Mock Filesystem Interactions for Go Unit Testing?

Verspottete 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)
    }
}
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage