Rumah > Artikel > pembangunan bahagian belakang > Bagaimana untuk mengintegrasikan perpustakaan pihak ketiga dalam ujian unit Golang?
Menyepadukan perpustakaan pihak ketiga dalam ujian unit Golang boleh dicapai melalui suntikan kebergantungan atau menggunakan stub: Suntikan ketergantungan: Gunakan olok-olok atau stub dan bukannya pelaksanaan perpustakaan sebenar. Contoh: Gunakan MockDependency untuk mengejek perpustakaan pihak ketiga dan menyuntiknya ke dalam fungsi yang sedang diuji. Stub: Menyediakan akses kepada pelaksanaan perpustakaan sebenar. Contoh: Gunakan stubFunc untuk stub fungsi sebenar dalam pustaka pihak ketiga dan mengatasi kelakuannya.
Menyepadukan perpustakaan pihak ketiga dalam ujian unit Golang memerlukan beberapa kemahiran. Artikel ini akan membimbing anda tentang cara untuk menyelesaikan tugasan ini dan memberikan contoh praktikal tentang cara untuk mencapainya.
Suntikan kebergantungan ialah cara yang berkesan untuk mengasingkan perpustakaan pihak ketiga dalam ujian. Ia membolehkan anda memberikan olok-olok atau stub dalam ujian anda dan bukannya menggunakan pelaksanaan perpustakaan sebenar.
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) }
Stub ialah cara lain untuk mengasingkan perpustakaan pihak ketiga. Tidak seperti olok-olok, stub menyediakan akses kepada pelaksanaan perpustakaan sebenar tetapi membolehkan anda mengawal panggilannya dengan memintas atau mengubah suai tingkah lakunya.
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) }
Andaikata kita mempunyai fungsi NewService
,它从第三方库 github.com/example/service
untuk mendapatkan contoh perkhidmatan. Kita boleh menggunakan suntikan kebergantungan untuk menguji fungsi ini:
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) }
Atas ialah kandungan terperinci Bagaimana untuk mengintegrasikan perpustakaan pihak ketiga dalam ujian unit Golang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!