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

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

DDD
DDD原創
2024-12-09 17:31:17444瀏覽

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn