パッケージ依存メソッドでインポートされた関数をモックする
外部パッケージからインポートされた関数に依存するメソッドのテストを作成する場合、モックが必要になる場合がありますインポートされた関数の実際の実装からテストを分離します。 Go では、これは簡単なリファクタリングで実現できます。
x.y.z パッケージから関数をインポートして使用する次のメソッドを考えてみましょう。
import x.y.z func abc() { ... v := z.SomeFunc() ... }
SomeFunc() をモックするには、インポートされた関数で初期化された関数型の変数 zSomeFunc:
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 サイトの他の関連記事を参照してください。