Heim > Artikel > Backend-Entwicklung > Mocking-Techniken beim Testen von Go-Funktionseinheiten
Mocking beim Unit-Testen ist die Technik, Test-Doubles in Unit-Tests zu erstellen, um externe Abhängigkeiten zu ersetzen, wodurch bestimmte Funktionen isoliert und getestet werden können. Die Grundprinzipien sind: Schnittstelle definieren, Mock erstellen, Mock injizieren. Um das GoogleMock-Mocking zu verwenden, müssen Sie die Schnittstelle definieren, das Mock erstellen und es in die Testfunktion einfügen. Um die Testify/Mock-Simulation zu verwenden, müssen Sie die MockClient-Struktur deklarieren, den erwarteten Wert für die Get-Methode festlegen und die Simulation in der Testfunktion festlegen.
Bei Unit-Tests ist Mocking eine Technik zum Erstellen von Testdoppeln, um externe Abhängigkeiten im zu testenden Code zu ersetzen. Dadurch können Sie bestimmte Funktionen isolieren und testen, ohne mit anderen Komponenten zu interagieren.
Die Grundprinzipien des Verspottens sind:
Betrachten Sie die folgende Funktion mit dem Paket net/http
: net/http
包的函数:
func GetPage(url string) (*http.Response, error) { client := http.Client{} return client.Get(url) }
要测试此函数,我们需要模拟 http.Client
,因为它是一个外部依赖项。
可以使用 GoogleMock 库进行模拟。首先,我们定义要模拟的接口:
type MockClient interface { Get(url string) (*http.Response, error) }
然后,我们可以使用 new(MockClient)
import ( "testing" "github.com/golang/mock/gomock" ) func TestGetPage(t *testing.T) { ctrl := gomock.NewController(t) defer ctrl.Finish() client := mock.NewMockClient(ctrl) client.EXPECT().Get("http://example.com").Return(&http.Response{}, nil) resp, err := GetPage("http://example.com") assert.NoError(t, err) assert.NotNil(t, resp) }Um diese Funktion zu testen, müssen wir
http.Client
verspotten, da es sich um einen handelt Externe Abhängigkeiten. Verwenden Sie GoogleMock zur SimulationSie können die GoogleMock-Bibliothek zur Simulation verwenden. Zuerst definieren wir die Schnittstelle zum Mock: 🎜import ( "testing" "github.com/stretchr/testify/mock" ) type MockClient struct { mock.Mock } func (m *MockClient) Get(url string) (*http.Response, error) { args := m.Called(url) return args.Get(0).(*http.Response), args.Error(1) } func TestGetPage(t *testing.T) { client := new(MockClient) client.On("Get", "http://example.com").Return(&http.Response{}, nil) resp, err := GetPage("http://example.com") assert.NoError(t, err) assert.NotNil(t, resp) }🎜 Dann können wir den Mock mit
new(MockClient)
erstellen und in die Testfunktion einfügen: 🎜rrreee🎜Mock mit testify/mock🎜🎜 The Die testify/mock-Bibliothek bietet auch Mocking-Funktionalität. Anwendungsbeispiele sind wie folgt: 🎜rrreeeDas obige ist der detaillierte Inhalt vonMocking-Techniken beim Testen von Go-Funktionseinheiten. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!