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 중국어 웹사이트의 기타 관련 기사를 참조하세요!