在Go 應用程式中,在不同的服務的單獨檔案中定義了getter 函數。每個函數都將資料庫連接和 SQL 參數作為輸入,並傳回結構化資料或錯誤。當嘗試從主包中模擬這些函數時,會出現此問題。
方法 1:模擬函數值
在 Go 中,它無法直接模擬函數。但是,您可以模擬函數值,其中包括變數、結構上的欄位和函數參數。為此,請將函數定義為變數或將其作為參數傳遞給另一個函數。
方法 2:使用介面
首選方法是類比介面。定義一個表示 getter 函數功能的接口,並實作該接口的真實版本和模擬版本。這允許您在測試期間注入模擬實作。
方法 3:模擬資料庫連接
如果 getter 函數依賴資料庫連接,您可以模擬資料庫而是連接類型。定義一個模擬實際資料庫連接方法的介面並實作一個模擬版本。這使您能夠在測試期間將模擬連接傳遞給 getter 函數。
type ProductRepository interface { GetProductById(db DBIface, ID int) (p Product, err error) } type ProductStore struct{} func (ProductStore) GetProductById(db DBIface, ID int) (p Product, err error) { // Your original implementation } type ProductRepositoryMock struct{} func (ProductRepositoryMock) GetProductById(DB DBIface, ID int) (p Product, err error) { // Mock implementation }
在此範例中,ProductRepository 介面定義了 GetProductById 函數。 ProductStore 結構使用真實的資料庫連接來實作此介面。 ProductRepositoryMock 結構體提供了用於測試的模擬實作。
透過使用介面或模擬函數值,您可以在 Go 中實現模擬,而無需修改原始函數聲明,從而使測試和隔離變得更加容易。
以上是如何有效模擬Go中的函數進行單元測試?的詳細內容。更多資訊請關注PHP中文網其他相關文章!