私は自分のプロジェクトでより多くの単体テストを使用していて、オンラインで入手できるすべての情報を読んでいて、多くの用語に混乱しています。結果として、私はおそらく会話やグーグル検索でこれらの用語を間違って使用しています。
誰かが「偽の」タイプやテストのタイプ(交互作用と統合)のようなすべての単体テスト用語の概要を説明できますか?
モックvs.フェイクvs.スタブに関しては、実際には、人々がそれらを解釈するいくつかの異なる方法があります。私は通常借ります マーティンファウラーによって定義された意味 :
相互作用テストは、オブジェクト間の相互作用が正しいことを確認する(期待されるメソッドが呼び出されることを確認する)単体テストを指す一般的な用語です。これは、結果の状態が正しい限り、メソッドで何が発生するかを気にしない状態(または従来の)テストとは対照的です。これらのタイプのテストは、上記でリンクしたFowlerの記事で比較されています。
統合テスト 実際には単体テストの側面ではなく、単体テストより上のレベルです。異なるユニットを取り、それらが正しく連携することを確認します。
MSN Magazineのこの 記事 は、用語を説明し、例といくつかのソースコードを使用して詳細に説明しています。
基本的にこれらはテストダブルです:
ファウラーはもちろん、区別するのに素晴らしい仕事をしました モックとスタブ しかし、私にとっては、 XUnitテストパターン 本がリファレンスであり、チェックすることをお勧めします モック、フェイク、スタブ、ダミー 包括的な比較。
ええ、私は知っています、これは混乱しているので、チェックすることをお勧めします モックとスタブはスパイではありません 、次に スパイしましょう そして最後に モッキート-ブロック上の新しいモックフレームワーク も。
さまざまなタイプのテストに関して、簡単な説明は次のようになります(これは完全なリストではありません)。
これらのタイプはすべて便利で排他的ではなく、実際には同じ意図を持っていません。
私は読んだ(そして心からお勧めする) The Art of Unit Testing by RoyOsherove。彼は簡略化された一連の用語を使用しています。
彼の本を言い換えると...
統合テスト-現在のプロセスまたはオブジェクトの外部に到達して他の何かと対話するテスト
相互作用テスト-オブジェクトが連携する方法のテスト
状態テスト-操作によって生成された結果のテスト
Fake-本物の代わりに使用される代用オブジェクト
Stub-テスト対象のコードに必要な依存関係を提供する代用オブジェクト
モック-テストの結果を確認するために使用される代役
ここでは、スタブとモックの両方をモックフレームワークによって提供できることに注意してください。区別は、使用されるテクノロジーと同じくらい、それらがどのように使用されるかについてです。