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

如何在不使用介面的情況下在 Go 測試中模擬結構方法呼叫?

DDD
DDD原創
2024-12-08 00:09:12735瀏覽

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

在沒有介面的Go 測試案例中模擬結構體的方法呼叫

在Go 中,沒有直接等效於Mockito 和jMock等框架結構的模擬方法呼叫。但是,可以採用多種技術來實現類似級別的模擬,而無需在原始程式碼中引入介面。

一種方法涉及創建一個模擬結構,該結構實現與原始結構相同的方法。然後可以將模擬結構注入到需要測試的函數或方法中,讓您可以控制行為並驗證呼叫。

考慮以下範例:

type A struct {}

func (a *A) perform(url string){
    // ...
} 

func invoke(s A, url string){
    out := s.perform(url)
    // ...
} 

到模擬perform的方法調用,您可以建立一個模擬結構體AMock,它實作與A相同的介面。

type AMock struct {}

func (a *AMock) perform(url string) {
    // mocked implementation
}

在您的測試案例中,您可以將模擬結構注入到呼叫函數中並斷言預期的行為。

另一種方法是使用依賴注入框架,例如 testify/mock。該框架提供了一組擴充方法,可讓您模擬介面並驗證其在測試案例中的使用情況。

import "github.com/stretchr/testify/mock"

type A struct {}

type AMock struct {
    mock.Mock
}

func (a *AMock) perform(url string){
    a.Called(url)
} 

func invoke(s *A, url string){
    // ...
} 

透過使用 testify/mock 框架,您可以輕鬆建立模擬,驗證方法調用,並為您的測試案例設定期望。

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

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