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

インターフェイスを使用せずに Go テストで Struct メソッド呼び出しをモックする方法は?

Susan Sarandon
リリース: 2024-12-09 18:57:26
オリジナル
373 人が閲覧しました

How to Mock Struct Method Calls in Go Tests Without Interfaces?

Go テストケースでの構造体のメソッド呼び出しのモック

問題:

モックの方法ソースにインターフェイスを導入しない Go テスト ケースでの構造体のメソッド呼び出しcode?

コード例:

type A struct {}

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

var s := A{}
func invoke(url string){
   out := s.perfom(url)
   ...
   ...
} 
ログイン後にコピー

答え:

構造体のメソッド呼び出しを模擬するには、アプローチは、モック オブジェクトを使用することです。

モックを使用した解決策オブジェクト:

  1. モックされるメソッドを定義する Performer インターフェイスを作成します。
  2. Performer インターフェイスの実際の実装 A を作成します。
  3. Performer インターフェースのモック実装 AMock。
  4. モック実装を呼び出し関数に渡します。

コード例:

type Performer interface {
    perform()
}

type A struct {}

func (a *A) perform() {
    fmt.Println("real method")
}

type AMock struct {}

func (a *AMock) perform () {
    fmt.Println("mocked method")
}

func caller(p Performer) {
    p.perform()
}
ログイン後にコピー

テスト ケースでは、モック実装を呼び出し関数に挿入します:

func TestCallerMock(t *testing.T) {
    mock := &AMock{}
    caller(mock)
}
ログイン後にコピー

実際のコードでは、実際の実装を呼び出しに挿入します。関数:

func RealInvoke(url string) {
    a := &A{}
    out := a.perform(url)
}
ログイン後にコピー

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート