goでテストするためのモックオブジェクトとスタブを書き込む方法は、他の言語(たとえば、Javaのockito)のような組み込みのモッキングフレームワークがありません。ただし、インターフェイスと構造体を使用して、モックとスタブを効果的に作成できます。重要なのは、コードが相互作用する依存関係を表すインターフェイスを定義することです。次に、実際のコードの具体的な実装を作成し、テスト用の個別のモック実装を作成します。
例:例:データベースと対話する関数があると想像してみましょう:
さあ、モックを作成しましょう。 m.getDatafunc(id)} return """、nil //またはデフォルト値/エラーを返します}
テストでは、 mockdatabase
を使用して、 getdata
:
<pre class="brush:php;toolbar:false"> <pre class="brush:php;toolbar:false"> <pre class="brush:php;toolbar:false"> <pre class="brush:php;toolbar:false"> <pre class="brush:php;toolbar:false"> <pre class="brush:php;toolbar:false"> <pre class="brush:php;toolbar:false"> <pre class="brush:php;toolbar:false"> <pre class="brush:php;toolbar:false"> <pre class="brush:php;toolbar:false"> <pre class="brush:php;toolbar:false"> <pre class="brush:php;toolbar:false"> <pre class="brush:php;toolbar:false"> <code codes="</p"> mockdb:=&amp; mockdatabase {getdatafunc:func(id int)(string、error){if id == 1 {return&quot; test data&quot;、nil} return&quot;&quot;&quot;、errors.new(&quot; quot; quot; quot; quot; quot;)}、} assert.equal(t、&quot; processed:test data&quot;、result)result、err = processdata(mockdb、2)assert.error(t、err)} </code>
この例は、単純なモックを示しています。スタブはさらに簡単です。通常、モック関数内の複雑なロジックなしで定義された値を返します。
mockdatabase
、 mockgetdata
)依存関係の多くのレイヤーをock笑している場合、それはデザインの欠陥を示している可能性があります。より良いテスト可能性のためにコードをリファクタリングすることを検討してください。上記の
Goの標準的なライブラリは専用のモッキングフレームワークを提供しませんが、いくつかのサードパーティライブラリはプロセスを簡素化するのに役立ちます:
これらのライブラリ間で選択することは、多くの場合、プロジェクトの複雑さと好みに依存します。より簡単なプロジェクトでは、手動でモックを作成するだけで十分です。大規模なプロジェクトまたは複雑なモッキング要件の場合、 edify/mock
または gomock
は、効率を大幅に改善し、ボイラープレートを減らすことができます。
以上がGOでテスト用のモックオブジェクトとスタブを書くにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。