Heim >Backend-Entwicklung >Golang >Wie kann ich importierte Funktionen in Go für effektive Tests simulieren?

Wie kann ich importierte Funktionen in Go für effektive Tests simulieren?

Linda Hamilton
Linda HamiltonOriginal
2024-12-25 03:55:17369Durchsuche

How Can I Mock Imported Functions in Go for Effective Testing?

Partielles Mocking für importierte Funktionen

In Go kann das Testen einer Funktion, die auf aus externen Paketen importierten Funktionen basiert, eine Herausforderung sein. Betrachten Sie das folgende Beispiel:

import x.y.z

func abc() {
    ...
    v := z.SomeFunc()
    ... 
}

Können wir z.SomeFunc() in Go verspotten?

Refactoring für Mocking

Ja, mit a einfache Codeänderung. Durch die Einführung einer funktionstypisierten Variablen zSomeFunc und deren Initialisierung mit z.SomeFunc kann der Paketcode diese Variable anstelle von z.SomeFunc() aufrufen. Dadurch können wir die importierte Funktion während des Testens verspotten.

var zSomeFunc = z.SomeFunc

func abc() {
    ...
    v := zSomeFunc()
    ...
}

Verspotten in Tests

In Tests können wir zSomeFunc eine benutzerdefinierte Funktion zuweisen, die sich wie beim Testen verhält.

func TestAbc(t *testing.T) {
    // Save current function and restore at the end:
    old := zSomeFunc
    defer func() { zSomeFunc = old }()

    zSomeFunc = func() int {
        // This will be called, do whatever you want to,
        // return whatever you want to
        return 1
    }

    // Call the tested function
    abc()

    // Check expected behavior
}

Durch die Umgestaltung des Codes können wir importierte Funktionen nachahmen und ihre Auswirkungen auf unseren Code effektiver testen. Diese Technik kann besonders nützlich sein, wenn Sie Abhängigkeiten von Drittanbietern testen oder bestimmte Funktionalitäten für gezielte Tests isolieren.

Das obige ist der detaillierte Inhalt vonWie kann ich importierte Funktionen in Go für effektive Tests simulieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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