首頁 >後端開發 >Golang >如何在沒有介面的情況下模擬 Go 中的結構方法呼叫?

如何在沒有介面的情況下模擬 Go 中的結構方法呼叫?

DDD
DDD原創
2024-12-13 13:13:09117瀏覽

How to Mock Struct Method Calls in Go without Interfaces?

Go 中的模擬結構體方法呼叫

在Go 中,在不引入介面的情況下模擬結構體的方法呼叫可以透過一種稱為“雙”模式。實作方法如下:

1.建立執行者介面:

定義一個封裝要模擬的方法的介面。

type Performer interface {
    perform()
}

2.使用模擬和真實實作實作介面:

建立兩個結構體,一個用於實際實作(A),另一個用於模擬(AMock),它們都實作Performer 介面。

type A struct{}

func (a *A) perform() {
    fmt.Println("real method")
}

type AMock struct{}

func (a *AMock) perform() {
    fmt.Println("mocked method")
}

3.使用依賴注入:

在您的invoke() 函數中,使用依賴注入來傳遞Performer 接口,而不是直接訪問全局變量。

func invoke(p Performer) {
    p.perform()
}

4 。在測試中註入 Mock:

在您的測試案例中,將 AMock 實例注入到 invoke() 函數中。這將允許您模擬模擬方法的行為。

// Create a mock performer
m := &AMock{}

// Inject the mock into invoke
invoke(m)

5.驗證模擬呼叫(可選):

如果您使用的是testify/mock 等模擬庫,您可以進一步驗證是否使用預期的參數和頻率呼叫了模擬方法。

// Assert that the mocked method was called
mock.AssertCalled(t, "perform", "argument1", "argument2")

透過利用 double 模式,您可以有效地模擬 Go 中結構體的方法調用,提供徹底測試所需的靈活性和隔離性。

以上是如何在沒有介面的情況下模擬 Go 中的結構方法呼叫?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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