Beim Testen von Go-Methoden, die aus externen Paketen importierte Funktionen verwenden, kann es für effektive Tests erforderlich sein, diese externen Funktionen zu verspotten. Ein Ansatz besteht darin, den Code umzugestalten und einen Zwischenfunktionsaufruf einzuführen, anstatt die externe Funktion direkt aufzurufen.
Im bereitgestellten Beispiel:
import x.y.z func abc() { ... v := z.SomeFunc() ... }
Erstellen Sie eine neue Variable zSomeFunc vom Typ func und Initialisieren Sie es mit der externen Funktion z.SomeFunc. Lassen Sie dann Ihr Paket zSomeFunc anstelle von z.SomeFunc aufrufen.
var zSomeFunc = z.SomeFunc func abc() { // ... v := zSomeFunc() // ... }
Jetzt können Sie in Ihren Tests zSomeFunc eine andere Funktion zuweisen, eine, die im Test definiert ist und einen vordefinierten Wert zurückgibt oder führt bestimmte Aktionen aus. Dadurch können Sie das Verhalten der externen Funktion zu Testzwecken nachahmen.
func TestAbc(t *testing.T) { // Save the original function and restore it at the end of the test. old := zSomeFunc defer func() { zSomeFunc = old }() zSomeFunc = func() int { // Do whatever you want to do and return whatever value you need. return 1 } // Call the tested function. abc() // Test the expected behavior. }
Alternativ können Sie eine Scheinimplementierung des x.y.z-Pakets erstellen und das Go Mocking Framework verwenden, um die Funktion SomeFunc() gezielt nachzuahmen .
Das obige ist der detaillierte Inhalt vonWie kann ich importierte Paketfunktionen in Go für effektive Tests verspotten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!