Go でのモンキー パッチ: レガシー コードをテストするためのソリューション
Go はインターフェイスに依存しているためモックが簡単ですが、必要な状況が発生する可能性があります。コードを変更せずにテストします。コードがインターフェイスを使用するように構造化されておらず、相互接続が高度な場合、従来のモック手法は困難であることが判明する可能性があります。
幸いなことに、Go はこの問題に対する解決策、モンキー パッチを提供します。この手法を使用すると、実行時にオブジェクトを変更できます。これを実装するには、モックする元の構造体をラップするインターフェイスを作成します:
type MyInterface interface { DoSomething(i int) error DoSomethingElse() ([]int, error) }
次に、元の構造体を Concrete 構造体内に埋め込み、インターフェイスのメソッドを Concrete 構造体内に実装します:
type Concrete struct { *somepackage.Client } func (c *Concrete) DoSomething(i int) error { return c.client.DoSomething(i) } func (c *Concrete) DoSomethingElse() ([]int, error) { return c.client.DoSomethingElse() }
この変更されたコードを使用すると、Client 型をモックするのと同じ方法で Concrete 型をモックできるようになり、必要なコードを必要とせずにコードをテストするためのソリューションが提供されます。元のコードベースに変更を加えます。
以上がGo でのモンキー パッチ適用は、レガシー コード テストの課題をどのように解決できるでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。