首頁  >  文章  >  後端開發  >  Golang 函式測試中的 mocks 和 stubs

Golang 函式測試中的 mocks 和 stubs

WBOY
WBOY原創
2024-04-16 18:54:01344瀏覽

在 Go 函數測試中,Mocks 和 Stubs 允許隔離和驗證外部相依性。 Mocks 模擬依賴項的行為,而 Stubs 提供固定值。使用 Mocks,需要使用 mockgen 產生 mock 文件,在測試中引入 mock,並設定 mock 期望值。使用 Stubs,需要引入 stub 套件,建立 stub,並斷言 stub 是否被呼叫。透過使用 Mocks 和 Stubs,我們可以提高函數測試的穩健性和可信度。

Golang 函数测试中的 mocks 和 stubs

如何在Go 函數測試中使用Mocks 和Stubs

在Go 中進行函數測試時,Mock 和Stub 是隔離和驗證外部相依性的有效技術。以下我們將探討如何在測試中使用這些技巧。

什麼是 Mocks 和 Stubs?

Mock 是一個模擬外部依賴項的替代品,可讓您在測試中指定其行為和特性。相反,Stub 是一種提供固定值的替代品,而不會模擬依賴項的行為。

使用Mocks:

##使用

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
}

使用Mock 測試:

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)
}

#使用Stub 測試:

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())
}

透過使用Mock 和Stub,我們可以將函數與外部依賴項隔離,並驗證它們在實際環境中的行為,從而提高函數測試的穩健性和可信度。

以上是Golang 函式測試中的 mocks 和 stubs的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn