Go では、外部パッケージからインポートされた関数に依存する関数のテストは困難な場合があります。次の例を考えてみましょう:
import x.y.z func abc() { ... v := z.SomeFunc() ... }
Go で z.SomeFunc() をモックできますか?
はい、簡単なコード変更。関数型変数 zSomeFunc を導入し、それを z.SomeFunc で初期化することにより、パッケージ コードは z.SomeFunc() の代わりにこの変数を呼び出すことができます。これにより、テスト中にインポートされた関数をモックすることができます。
var zSomeFunc = z.SomeFunc func abc() { ... v := zSomeFunc() ... }
テストでは、テストに必要な動作をするカスタム関数を zSomeFunc に割り当てることができます。
func TestAbc(t *testing.T) { // Save current function and restore at the end: old := zSomeFunc defer func() { zSomeFunc = old }() zSomeFunc = func() int { // This will be called, do whatever you want to, // return whatever you want to return 1 } // Call the tested function abc() // Check expected behavior }
コードをリファクタリングすることで、インポートされた関数を模擬し、コードに対するその影響をより効果的にテストできます。この手法は、サードパーティの依存関係をテストする場合や、対象を絞ったテストのために機能の特定の部分を分離する場合に特に役立ちます。
以上が効果的なテストのために Go でインポートされた関数をモックするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。