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
Freigeben: 2025-01-02 18:57:37
Original
223 Leute haben es durchsucht

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

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()
    // ...
}
Nach dem Login kopieren

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

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!

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