Heim  >  Artikel  >  Backend-Entwicklung  >  Mocking-Techniken beim Testen von Go-Funktionseinheiten

Mocking-Techniken beim Testen von Go-Funktionseinheiten

WBOY
WBOYOriginal
2024-04-30 18:21:01585Durchsuche

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.

Go 函数单元测试中的模拟技巧

Mocking-Techniken beim Testen von Go-Funktionseinheiten

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.

Grundprinzipien des Verspottens

Die Grundprinzipien des Verspottens sind:

  1. Definieren Sie die Schnittstelle: Erstellen Sie eine Schnittstelle, die die zu verspottende Komponente darstellt.
  2. Mock erstellen: Erstellen Sie eine Mock-Implementierung dieser Schnittstelle, die die erwarteten Aufrufe und zurückgegebenen Werte definiert.
  3. Injizieren Sie Mocks: Ersetzen Sie in Testfunktionen echte Abhängigkeiten durch Mocks.

Praktischer Fall

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 进行模拟

可以使用 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 Simulation

Sie 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: 🎜rrreee

Das 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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn