ホームページ > バックエンド開発 > Golang > Golang 関数テストのモックとスタブ

Golang 関数テストのモックとスタブ

WBOY
リリース: 2024-04-16 18:54:01
オリジナル
410 人が閲覧しました

Go 関数のテストでは、モックとスタブを使用して外部依存関係を分離して検証できます。モックは依存関係の動作をシミュレートしますが、スタブは固定値を提供します。モックを使用するには、mockgen を使用してモック ファイルを生成し、テストにモックを導入し、モックの期待値を設定する必要があります。スタブを使用するには、スタブ パッケージを導入し、スタブを作成し、スタブが呼び出されるかどうかをアサートする必要があります。モックとスタブを使用することで、機能テストの堅牢性と信頼性を向上させることができます。

Golang 函数测试中的 mocks 和 stubs

Go 関数テストでモックとスタブを使用する方法

Go で関数テストを実行する場合、モックとスタブは分離され、外部依存関係を検証するための効果的な手法。以下では、これらのテクニックをテストで使用する方法を見ていきます。

モックとスタブとは何ですか?

モックは、外部依存関係をモックする代替手段であり、テスト内でその動作や特性を指定できます。対照的に、スタブは、依存関係の動作をシミュレートせずに固定値を提供する代替品です。

モックの使用:

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
ログイン後にコピー

を生成します。テスト関数 モックの導入:

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

func TestFunctionWithCustomerService(t *testing.T) {
    mockCustomerService := &mocks.CustomerService{}
}
ログイン後にコピー

モックの期待値の設定:

// 设置客户创建方法的预期行为
mockCustomerService.On("CreateCustomer", mock.Anything).Return(nil, nil)
ログイン後にコピー

スタブの使用:

スタブ パッケージの導入:

import "github.com/stretchr/testify/stub"
ログイン後にコピー

テスト関数 Create Stub in:

// 创建一个提供固定数字值的 `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
}
ログイン後にコピー

モックを使用してテスト:

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)
}
ログイン後にコピー

スタブを使用してテスト:

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())
}
ログイン後にコピー

モックとスタブを使用することで、関数を外部の依存関係から分離し、実際の環境での動作を検証できるため、関数テストの堅牢性と信頼性が向上します。

以上がGolang 関数テストのモックとスタブの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート