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!