首頁 > 後端開發 > Golang > 如何在Go中達到Monkey Patching的效果進行測試和基準測試?

如何在Go中達到Monkey Patching的效果進行測試和基準測試?

Linda Hamilton
發布: 2024-12-11 12:26:11
原創
724 人瀏覽過

How Can I Achieve the Effect of Monkey Patching in Go for Testing and Benchmarking?

Go 中的猴子修補

在Go 程式語言中,在處理不圍繞介面建構的程式碼時,模擬可能具有挑戰性。當結構直接互連且不存在依賴注入時,它會阻礙在不修改底層程式碼的情況下有效測試和基準測試的能力。

從像 Python 這樣的腳本語言中可能想到的一種技術是猴子修補,其中物件可以在運行時修改。雖然 Go 沒有直接物件修改的等效機制,但有其他方法可以實現類似的結果。

一種常見策略是建立自己的介面作為您希望模擬的結構的包裝器。這允許您在介面方法中實現所需的行為,同時保留底層結構中的原始功能。例如:

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()
}
登入後複製

透過實作MyInterface,您現在可以為測試建立模擬實作:

// MockMyInterface implements MyInterface for testing purposes
type MockMyInterface struct {
    mockedDoSomethingError error
    mockedDoSomethingElseResult []int
}

func (m *MockMyInterface) DoSomething(i int) error {
    return m.mockedDoSomethingError
}

func (m *MockMyInterface) DoSomethingElse() ([]int, error) {
    return m.mockedDoSomethingElseResult, nil
}
登入後複製

@elithrar 在評論中建議的另一種方法是嵌入您希望在自己的結構中模擬的類型。這允許您有選擇地僅模擬需要它的方法:

type Concrete struct {
    *somepackage.Client
}
登入後複製

透過嵌入 Client,您可以直接呼叫 DoSomethingNotNeedingMocking 等方法,而無需將它們新增至介面或為它們建立模擬。

這些技術為猴子修補提供了可行的替代方案,用於測試和基準測試不圍繞介面構建的程式碼。

以上是如何在Go中達到Monkey Patching的效果進行測試和基準測試?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板