ホームページ > バックエンド開発 > Golang > Monkey Patching は Go の変更不可能なコードベースのテスト問題を解決できるか?

Monkey Patching は Go の変更不可能なコードベースのテスト問題を解決できるか?

DDD
リリース: 2024-12-15 15:11:18
オリジナル
912 人が閲覧しました

Can Monkey Patching Solve Go's Unchangeable Code Base Testing Problems?

Go でのモンキー パッチ: 変更不可能なコード ベースのソリューション

インターフェイスにプログラムされておらず、高度に相互接続されているコード ベースを操作すると、次のような問題が発生する可能性があります。テストとベンチマークの課題。このようなシナリオでは、従来のモック手法は適用できない可能性があります。ただし、Go にはモンキー パッチという役立つ戦略があります。

同様の状況に直面した場合、推奨されるアプローチには、変更できないコードのラッパーとしてカスタム インターフェイスを作成することが含まれます。これにより、元のコードをそのまま残しながら、テストで特定のメソッドをモックすることができます。

説明するには、次の例を考えてみましょう。

type MyInterface interface {
    DoSomething(i int) error
    DoSomethingElse() ([]int, error)
}

type Concrete struct {
    client *somepackage.Client
}

func (c *Concrete) DoSomething(i int) error {
    return c.client.DoSomething(i)
}

func (c *Concrete) DoSomethingElse() ([]int, error) {
    return c.client.DoSomethingElse()
}
ログイン後にコピー

このシナリオでは、Concrete は変更できないコードです。 。 MyInterface インターフェイスを作成し、元の Concrete 構造体を埋め込むことで、テストでそのメソッドをモックする柔軟性が得られます。

// Replace the embedded type with a mock in tests
type MockConcrete struct {
    MyInterface
}

func (m *MockConcrete) DoSomething(i int) error {
    // Implement custom logic for mocking DoSomething
}
ログイン後にコピー

このアプローチは、基礎となるコードを変更せずに特定の機能をテストする方法を提供します。

コメントで提案されているように、別のインターフェイスを作成する代わりに、目的のタイプを直接埋め込むこともできます。これにより、必要なメソッドのみを選択的にモックすることができます。

type Concrete struct {
    *somepackage.Client
}
ログイン後にコピー

この戦略では、埋め込み型でモックされていないメソッドに直接アクセスする機能が維持され、テストの柔軟性が向上します。

以上がMonkey Patching は Go の変更不可能なコードベースのテスト問題を解決できるか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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