„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Kann der Affen Patch das Testerproblem der unveränderlichen Codebasis von Go lösen?

Kann der Affen Patch das Testerproblem der unveränderlichen Codebasis von Go lösen?

Gepostet am 2025-04-30
Durchsuche:753

Can Monkey Patching Solve Go's Unchangeable Code Base Testing Problems?

Monkey Patching in Go: Eine Lösung für unveränderliche Code -Basen

Arbeiten mit Codebasen, die nicht an Schnittstellen und stark miteinander verbundenen Herausforderungen für das Testen und Benchmarkieren vorstellen können. In solchen Szenarien sind traditionelle Verspottungstechniken möglicherweise nicht anwendbar. Es gibt jedoch eine Strategie in Go, die helfen kann: Monkey -Patching.

Wenn Sie mit einer ähnlichen Situation konfrontiert sind, beinhaltet der vorgeschlagene Ansatz die Erstellung einer benutzerdefinierten Schnittstelle als Wrapper um den nicht modifizierbaren Code. Auf diese Weise können Sie spezifische Methoden in Tests verspotten, während Sie den Originalcode intakt lassen.

, um das folgende Beispiel zu veranschaulichen:

type MyInterface interface {
    DoSomething(i int) error
    DoSomethingElse() ([]int, error)
}

type Concrete struct {
    client *somepackage.Client
}

func (c *Concrete) DoSomething(i int) error {
    return c.client.DoSomething(i)
}

func (c *Concrete) DoSomethingElse() ([]int, error) {
    return c.client.DoSomethingElse()
}

In diesem Szenario ist konkret der Code, den Sie nicht ändern können. Durch Erstellen der Schnittstelle von MyInterface und Einbetten der ursprünglichen Betonstruktur erhalten Sie die Flexibilität, ihre Methoden in Tests zu verspotten:

// Replace the embedded type with a mock in tests
type MockConcrete struct {
    MyInterface
}

func (m *MockConcrete) DoSomething(i int) error {
    // Implement custom logic for mocking DoSomething
}

Dieser Ansatz bietet eine Möglichkeit, bestimmte Funktionen zu testen, ohne den zugrunde liegenden Code zu ändern.

Alternativ können Sie, wie in den Kommentaren vorgeschlagen, auch den gewünschten Typ direkt einbetten, anstatt ein separates Schnittpunkt zu erstellen. Auf diese Weise können Sie nur die Methoden, die Sie benötigen, selektiv verspotten:

type Concrete struct {
    *somepackage.Client
}

Diese Strategie behält die Fähigkeit bei, auf nicht mockierte Methoden direkt auf den eingebetteten Typ zuzugreifen und eine größere Flexibilität beim Testen zu bieten.

Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3