Heim  >  Artikel  >  Backend-Entwicklung  >  Mocks und Stubs beim Golang-Funktionstest

Mocks und Stubs beim Golang-Funktionstest

WBOY
WBOYOriginal
2024-04-16 18:54:01344Durchsuche

Mocks und Stubs ermöglichen die Isolierung und Überprüfung externer Abhängigkeiten beim Go-Funktionstest. Mocks simulieren das Verhalten von Abhängigkeiten, während Stubs feste Werte bereitstellen. Um Mocks zu verwenden, müssen Sie Mockgen verwenden, um Mock-Dateien zu generieren, Mocks in Tests einzuführen und Mock-Erwartungen festzulegen. Um Stubs zu verwenden, müssen Sie das Stub-Paket einführen, den Stub erstellen und feststellen, ob der Stub aufgerufen wird. Durch die Verwendung von Mocks und Stubs können wir die Robustheit und Zuverlässigkeit von Funktionstests verbessern.

Golang 函数测试中的 mocks 和 stubs

So verwenden Sie Mocks und Stubs beim Funktionstest in Go

Mocks und Stubs sind effektive Techniken zum Isolieren und Validieren externer Abhängigkeiten beim Funktionstest in Go. Im Folgenden erfahren Sie, wie Sie diese Techniken beim Testen verwenden.

Was sind Mocks und Stubs?

Mock ist ein Ersatz für das Verspotten externer Abhängigkeiten und ermöglicht es Ihnen, deren Verhalten und Eigenschaften in Ihren Tests anzugeben. Im Gegensatz dazu ist ein Stub ein Ersatz, der feste Werte bereitstellt, ohne das Verhalten von Abhängigkeiten zu simulieren.

Verwenden Sie Mocks:

Verwenden Sie mockgen, um mock-Dateien zu generieren: mockgen 生成 mock 文件:

go get github.com/golang/mock/mockgen
mockgen -package=api -destination=mocks/customer_mock.go github.com/your-org/your-repo/api CustomerService

在测试函数中引入 Mock:

import mocks "github.com/your-org/your-repo/api/mocks"

func TestFunctionWithCustomerService(t *testing.T) {
    mockCustomerService := &mocks.CustomerService{}
}

设置 Mock 期望值:

// 设置客户创建方法的预期行为
mockCustomerService.On("CreateCustomer", mock.Anything).Return(nil, nil)

使用 Stubs:

引入 Stub 包:

import "github.com/stretchr/testify/stub"

在测试函数中创建 Stub:

// 创建一个提供固定数字值的 `Stub`,作为 avg 升序的占位符
stubAvg := stub.On(ioutil, "ReadFile").Return([]byte("80"), nil)

实战案例:

假设我们有一个函数 GetCustomerAge,它从依赖项 CustomerService

func GetCustomerAge(customerID int64) (int, error) {
    customer, err := service.GetCustomer(customerID)
    if err != nil {
        return 0, err
    }
    return customer.Age, nil
}

Fügen Sie Mock in der Testfunktion ein:

func TestGetCustomerAgeWithMock(t *testing.T) {
    mockCustomerService := &mocks.CustomerService{}

    // 设置 Mock 期望值
    mockCustomerService.On("GetCustomer", mock.Anything).Return(&models.Customer{Age: 25}, nil)

    age, err := GetCustomerAge(1)
    assert.NoError(t, err)
    assert.Equal(t, 25, age)
}
Setzen Sie den erwarteten Mock-Wert:
func TestGetCustomerAgeWithStub(t *testing.T) {
    stubCustomerService := stub.On(service, "GetCustomer").Return(&models.Customer{Age: 25}, nil)

    age, err := GetCustomerAge(1)
    assert.NoError(t, err)
    assert.Equal(t, 25, age)

    // 断言 Stub 是否被调用
    assert.True(t, stubCustomerService.Called())
}

Stubs verwenden:

Stub-Paket vorstellen:

rrreee

Stub in Testfunktion erstellen: 🎜rrreee🎜🎜Praktischer Fall: 🎜🎜🎜Angenommen, wir haben eine Funktion GetCustomerAge, die von der Abhängigkeit CustomerService ruft Kundendaten ab. 🎜rrreee🎜🎜Testen mit Mocks: 🎜🎜rrreee🎜🎜Testen mit Stubs: 🎜🎜rrreee🎜Durch die Verwendung von Mocks und Stubs können wir Funktionen verbessern, indem wir sie von externen Abhängigkeiten isolieren und ihr Verhalten in einer realen Umgebung überprüfen. Testen Sie Robustheit und Vertrauen. 🎜

Das obige ist der detaillierte Inhalt vonMocks und Stubs beim Golang-Funktionstest. 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