Heim >Backend-Entwicklung >Golang >Wie kann ich externe Funktionen in Go for Unit Testing verspotten?

Wie kann ich externe Funktionen in Go for Unit Testing verspotten?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2025-01-02 18:57:37221Durchsuche

How Can I Mock External Functions in Go for Unit Testing?

Verspotten externer Funktionen in Go

Beim Testen von Funktionen, die auf externen Paketen basieren, kann das Verspotten dieser externen Funktionen für die Erstellung isolierter und zuverlässiger Funktionen von entscheidender Bedeutung sein Tests. Betrachten Sie das folgende Beispiel:

import x.y.z

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

Können wir z.SomeFunc() verspotten, um abc() zu testen?

Lösung: Refactoring und Mocking

Ja, z.SomeFunc() zu verspotten ist mit einem einfachen Refactoring möglich. Führen Sie eine Variable zSomeFunc vom Funktionstyp ein und initialisieren Sie sie mit z.SomeFunc. Rufen Sie dann innerhalb Ihrer Funktion, die z.SomeFunc() aufruft, stattdessen zSomeFunc() auf:

var zSomeFunc = z.SomeFunc

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

Weisen Sie zSomeFunc während Tests eine benutzerdefinierte Funktion zu, die das gewünschte Testverhalten zurückgibt. Zum Beispiel:

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
}

Das obige ist der detaillierte Inhalt vonWie kann ich externe Funktionen in Go for Unit Testing verspotten?. 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