Golang 単体テストで関数をモックするには次の方法があります: モック パッケージを使用します: gomock.Mock メソッドを使用してモック関数を作成し、EXPECT と RETURN を使用してその戻り値と動作を設定します。 testing.T の使用: testing.T 構造体の Helper、Run、および Parallel メソッドを使用して関数をモックします。匿名関数を使用する: 特に一度だけ呼び出す必要がある場合は、匿名関数を使用して関数をすばやくシミュレートします。
単体テストでは、関数のモック化は、コードをテストするときに実際の関数を置き換える強力な手法です。これにより、外部要因に依存せずに関数の正しさを検証できます。 Golang では関数をシミュレートするさまざまな方法が提供されており、この記事では最も一般的な手法のいくつかを紹介します。
mock
パッケージを使用する mock
包mock
包是模拟函数的推荐方式。它提供了一个简单的接口,允许您创建和验证函数调用的模拟。
package main import ( "fmt" "github.com/golang/mock/gomock" ) type Fooer interface { Foo() string } func main() { ctrl := gomock.NewController(nil) defer ctrl.Finish() mockFooer := mock_Fooer(ctrl) // 设置模拟的返回值 mockFooer.EXPECT().Foo().Return("Hello, world!") // 调用模拟函数 fmt.Println(mockFooer.Foo()) }
testing.T
testing.T
结构提供了一些用于模拟函数的方法,包括 Helper
、Run
和 Parallel
mock
パッケージは、関数をシミュレートするための推奨される方法です。関数呼び出しのモックを作成および検証できるシンプルなインターフェイスを提供します。 package main import ( "fmt" "testing" ) type Fooer interface { Foo() string } func TestFoo(t *testing.T) { t.Helper() // 设置模拟的返回值 foo := func() string { return "Hello, world!" } // 调用模拟函数 fmt.Println(foo()) }
testing.T
を使用します testing.T
構造体は、Helper
、Run< などの関数をシミュレートするためのメソッドをいくつか提供します。 /code> メソッドと <code>Parallel
メソッド。 package main import ( "fmt" ) func main() { // 定义模拟函数 foo := func() string { return "Hello, world!" } // 调用模拟函数 fmt.Println(foo()) }
package main import ( "context" "fmt" "testing" "github.com/golang/mock/gomock" ) type UserStore interface { Get(ctx context.Context, id int) (*User, error) } type User struct { Name string } func TestGetUser(t *testing.T) { ctrl := gomock.NewController(t) defer ctrl.Finish() mockUserStore := mock_UserStore(ctrl) // 设置模拟的返回值 mockUserStore.EXPECT().Get(gomock.Any(), 1).Return(&User{Name: "John Doe"}, nil) // 实例化待测函数 userService := UserService{ userStore: mockUserStore, } // 调用待测函数 user, err := userService.GetUser(context.Background(), 1) if err != nil { t.Fatalf("GetUser() failed: %v", err) } // 验证函数的行为 if user.Name != "John Doe" { t.Errorf("GetUser() returned unexpected user name: %s", user.Name) } }
以上がGolang 単体テストで関数をモックするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。