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

如何在沒有介面的 Go 測試中模擬結構方法呼叫?

Susan Sarandon
Susan Sarandon原創
2024-12-09 18:57:26375瀏覽

How to Mock Struct Method Calls in Go Tests Without Interfaces?

Go 測試案例中結構體的模擬方法呼叫

問題:

程式碼範例:

type A struct {}

func (a *A) perfom(string){
...
...
..
} 

var s := A{}
func invoke(url string){
   out := s.perfom(url)
   ...
   ...
} 

答案:

要模擬結構體的方法調用,一方法是使用模擬對象。

使用 Mock 的解決方案物件:

  1. 建立一個 Performer 接口,定義要模擬的方法。
  2. 建立 Performer 介面的真正實作 A。
  3. 建立一個Performer介面的mock實作AMock。
  4. 將mock實作傳遞給測試中的invoke函數case.

範例程式碼:

type Performer interface {
    perform()
}

type A struct {}

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

type AMock struct {}

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

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

在測試案例中,將模擬實作注入到呼叫函數中:

func TestCallerMock(t *testing.T) {
    mock := &AMock{}
    caller(mock)
}

在真正的程式碼中,將真正的實作注入到invoke函數中:

func RealInvoke(url string) {
    a := &A{}
    out := a.perform(url)
}

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

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