首頁 > 後端開發 > Golang > 如何模擬不可修改的 Go 程式碼進行測試?

如何模擬不可修改的 Go 程式碼進行測試?

DDD
發布: 2024-12-09 17:31:17
原創
460 人瀏覽過

How Can I Mock Unmodifiable Go Code for Testing?

針對不可修改程式碼的Golang Monkey 修補

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

測試包裝器

您現在可以在單元測試中模擬特定結構,因為它遵循一個介面:

// Mock Concrete
mock := &MockMyInterface{}
c := Concrete{mock}

// Call mock method
err := c.DoSomething(10)
登入後複製

嵌入原始類型

按照@elithrar的建議,您還可以嵌入原始類型以選擇性地模擬僅必要的方法:

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

在這種情況下,您仍然可以訪問不需要模擬的方法的原始實作:

c := Concrete{&somepackage.Client{}}
c.DoSomethingNotNeedingMocking() // Calls the original implementation
登入後複製

以上是如何模擬不可修改的 Go 程式碼進行測試?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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