Go での構造体のメソッド呼び出しのモック化
Go では、インターフェイスを導入せずに構造体のメソッド呼び出しをモック化することは、次のような手法で実現できます。 「ダブル」パターン。実装方法は次のとおりです。
1.パフォーマー インターフェイスを作成します。
モックするメソッドをカプセル化するインターフェイスを定義します。
type Performer interface { perform() }
2.モックと実際の実装を使用したインターフェイスの実装:
両方とも Performer インターフェイスを実装する、実際の実装 (A) 用とモック (AMock) 用の 2 つの構造体を作成します。
type A struct{} func (a *A) perform() { fmt.Println("real method") } type AMock struct{} func (a *AMock) perform() { fmt.Println("mocked method") }
3.依存関係の注入を使用する:
invoke() 関数で、グローバル変数に直接アクセスするのではなく、依存関係の注入を使用して Performer インターフェイスを渡します。
func invoke(p Performer) { p.perform() }
4 。テストにモックを挿入する:
テスト ケースで、AMock インスタンスを invoke() 関数に挿入します。これにより、モックされたメソッドの動作をシミュレートできるようになります。
// Create a mock performer m := &AMock{} // Inject the mock into invoke invoke(m)
5.モック呼び出しの検証 (オプション):
testify/mock などのモック ライブラリを使用している場合は、モックされたメソッドが予期された引数と頻度で呼び出されたことをさらに検証できます。
// Assert that the mocked method was called mock.AssertCalled(t, "perform", "argument1", "argument2")
二重パターンを利用すると、Go で構造体のメソッド呼び出しを効果的にモックでき、徹底的なテストに必要な柔軟性と分離が実現します。
以上がインターフェイスなしでGoでStructメソッド呼び出しをモックする方法?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。