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) }
スタブは、サードパーティのライブラリを分離するもう 1 つの方法です。モックとは異なり、スタブは実際のライブラリ実装へのアクセスを提供しますが、その動作をインターセプトまたは変更することでその呼び出しを制御できます。
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 中国語 Web サイトの他の関連記事を参照してください。