在沒有介面的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中文網其他相關文章!