ホームページ >バックエンド開発 >Golang >インターフェイスなしでGoでStructメソッド呼び出しをモックする方法?

インターフェイスなしでGoでStructメソッド呼び出しをモックする方法?

DDD
DDDオリジナル
2024-12-13 13:13:09117ブラウズ

How to Mock Struct Method Calls in Go without Interfaces?

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。