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