ホームページ >バックエンド開発 >Golang >インターフェイスを使用せずに Go テストケースで構造体メソッドをモックする方法は?

インターフェイスを使用せずに Go テストケースで構造体メソッドをモックする方法は?

DDD
DDDオリジナル
2024-12-20 17:52:10642ブラウズ

How to Mock Struct Methods in Go Test Cases Without Interfaces?

Go テスト ケースでの構造体メソッドのモック化

Go では、ソース コードにインターフェイスを導入せずに、構造体のメソッド呼び出しをモック化できます。 。方法は次のとおりです:

サンプルの構造体とメソッドをモックする

次の構造体とメソッドを考えてみましょう:

type A struct {}

func (a *A) perfom(string){
...
...
..
}

テスト ケースでのモック

テスト用に Perform メソッドをモックするにはケース:

  1. モック インターフェイスの作成: モックされるメソッドを表すインターフェイスを定義します。
type Performer interface {
    perform(string)
}
  1. モック実装と実際の実装の作成: 両方のモックのインターフェイスを実装します。
type AMock struct {}

func (a *AMock) perform(string) {
    // Mocked behavior
}

type A struct {}

func (a *A) perform(string) {
    // Real implementation
}
  1. 依存関係の挿入を使用する: モックまたは実際の実装を引数としてテスト対象の関数に渡します。
func invoke(url string, p Performer) {
    out := p.perfom(url)
    ...
    ...
}
  1. モックを挿入テスト: テスト ケースで、模擬実装を呼び出し関数に挿入します。
func TestInvokeWithMock(t *testing.T) {
    var amok = &AMock{}
    invoke("url", amok)
    // Verify mock behavior (e.g., assert it was called with the correct argument)
}
  1. 本番コードに実際の実装を挿入します: 本番環境コードでは、構造体の実際の実装を呼び出しに挿入します。 function.
func TestInvokeWithReal(t *testing.T) {
    var a = &A{}
    invoke("url", a)
    // No need for verification since it's the real implementation
}

その他のオプション

[testify/mock] のようなライブラリ(https://godoc.org/github.com/stretchr/) testify/mock) は、さらに堅牢なモック機能を提供し、モックの動作を制御し、メソッド呼び出しを検証できるようにします。

以上がインターフェイスを使用せずに Go テストケースで構造体メソッドをモックする方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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