Monkey-Patching in Go: Eine Lösung zum Testen von Legacy-Code
Obwohl die Abhängigkeit von Go von Schnittstellen das Mocking vereinfacht, können Situationen auftreten, in denen Sie es benötigen um Code zu testen, ohne ihn zu ändern. Wenn der Code nicht für die Verwendung von Schnittstellen strukturiert und stark miteinander verbunden ist, können sich herkömmliche Mocking-Techniken als Herausforderung erweisen.
Glücklicherweise bietet Go eine Lösung für dieses Problem: Monkey Patching. Mit dieser Technik können Sie Objekte zur Laufzeit ändern. Um es zu implementieren, erstellen Sie eine Schnittstelle, die die ursprüngliche Struktur umschließt, die Sie verspotten möchten:
type MyInterface interface { DoSomething(i int) error DoSomethingElse() ([]int, error) }
Als nächstes betten Sie die ursprüngliche Struktur in Ihre konkrete Struktur ein und implementieren Sie die Methoden Ihrer Schnittstelle in die konkrete Struktur:
type Concrete struct { *somepackage.Client } func (c *Concrete) DoSomething(i int) error { return c.client.DoSomething(i) } func (c *Concrete) DoSomethingElse() ([]int, error) { return c.client.DoSomethingElse() }
Mit diesem modifizierten Code können Sie den Concrete-Typ auf die gleiche Weise verspotten, wie Sie den Client-Typ verspotten würden, und bietet so eine Lösung zum Testen von Code, ohne dass Änderungen am Original erforderlich sind Codebasis.
Das obige ist der detaillierte Inhalt vonWie kann Monkey Patching in Go die Herausforderungen beim Testen von Legacy-Code lösen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!