在 Golang 單元測試中整合第三方函式庫可透過依賴注入或使用存根實作:依賴注入:使用模擬或存根取代實際函式庫實現。範例:使用 MockDependency 模擬第三方函式庫,並將其註入到待測函數中。存根:提供對真實庫實現的存取。範例:使用 stubFunc 存根第三方函式庫中的實際函數,並覆寫其行為。
#在 Golang 單元測試中整合第三方函式庫需要一些技巧。本文將指導你如何完成這項任務,並提供一個實戰案例來說明如何實現。
依賴注入是一種在測試中隔離第三方函式庫的有效方式。它允許你在測試中提供模擬或存根,而不是使用實際的函式庫實作。
import ( "testing" "github.com/stretchr/testify/assert" ) // MockDependency 模拟第三方库 type MockDependency struct { result int } // Method 模拟第三方库的方法 func (m *MockDependency) Method() int { return m.result } func TestFunctionUnderTest(t *testing.T) { // 使用模拟的依赖项 dependency := &MockDependency{result: 42} // 调用待测函数 result := FunctionUnderTest(dependency) // 断言结果 assert.Equal(t, 42, result) }
存根是另一種隔離第三方函式庫的方法。與模擬不同,存根提供對真實庫實現的訪問,但允許你透過攔截或修改其行為來控制其呼叫。
import ( "testing" "github.com/stretchr/testify/assert" "github.com/google/go-cmp/cmp" ) func TestFunctionUnderTest(t *testing.T) { // 使用存根函数 stubFunc := func() (string, error) { return "stubbed result", nil } originalFunc := library.Func // 覆盖实际函数 library.Func = stubFunc // 调用待测函数 result, err := FunctionUnderTest() // 还原实际函数 library.Func = originalFunc // 断言结果 assert.NoError(t, err) diff := cmp.Diff("stubbed result", result) assert.Empty(t, diff) }
假設我們有一個函數NewService
,它從第三方函式庫github.com/example/service
中取得一個服務實例。我們可以使用依賴注入來測試這個函數:
import ( "testing" "github.com/stretchr/testify/assert" "github.com/example/service" ) // MockService 模拟 service 库 type MockService struct { result *service.Service } // NewMockService 返回一个模拟的服务实例 func NewMockService(result *service.Service) *MockService { return &MockService{result: result} } // Service 返回模拟的服务实例 func (m *MockService) Service() *service.Service { return m.result } func TestNewService(t *testing.T) { // 使用模拟的服务 mockService := NewMockService(&service.Service{}) // 调用待测函数 newService, err := NewService(mockService) // 断言结果 assert.NoError(t, err) assert.Equal(t, &service.Service{}, newService) }
以上是如何在 Golang 單元測試中整合第三方函式庫?的詳細內容。更多資訊請關注PHP中文網其他相關文章!