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