1

Easymock (または同様のモック フレームワーク) を使用して単体テストを実装すると、対話ベースのテストを行う必要があります (依存関係の状態をアサートできないためです。それとも間違っているのでしょうか?)。

一方、(easymock を使用する代わりに) 手書きのスタブを使用すると、状態ベースのテストを実装できます。

インタラクション ベースのテストと状態ベースのテストのどちらを使用するかはよくわかりません。

私は偏見があり、Easymock を使用したいと思っていますが、将来直面する可能性のある副作用があるかどうかはわかりません。

誰でもこれに光を当てることができますか?

前もって感謝します!

4

2 に答える 2

4

オブジェクトをドメイン値オブジェクト (状態を保持し、不変である必要があります) とサービスに分割する必要があります。サービスは、特定のタスクを実行するために他のオブジェクトが要求する必要があるものですが、このタスクがどのように実行されるかをコードで気にする必要はありません。ピアをテストせずにサービスを単独でテストするには、モックを使用します。

計算などのドメイン機能を含む可能性のある値オブジェクトは、決してモックしないでください。その責任は計算であり、委任ではないためです。

適切に設計されたシステムでは、サービスは常に注入され、他のサービスから返されることはありません。したがって、一般的に言えば、モックはモックを返すべきではありません。

于 2010-05-05T10:24:57.670 に答える
0

両方できない理由はありません。モックを使用した動作ベースまたは相互作用ベースのテストは、動作をテストするだけの場合に定型文を大幅に節約できることがわかりました。手書きのスタブを使用すると、メソッドが呼び出されたことを示すブール値が大量に発生し、それをテストする必要があります。それは冗長で、もろく、かなり厄介です。

一方、状態をテストしたい場合もあります。たとえば、テスト中のオブジェクトの動作を候補の状態に基づいて変更する必要があり、モッキングまたはスタブ化する必要があり、解決すべき複雑な相互作用がある場合です。

その場合、フレームワークのモックが邪魔になる可能性があり、手書きのスタブを使用すると、テストの目的で状態を管理しやすくなります。

要するに、それらは相互に排他的ではないということです。特定のテストに適したものを使用してください。各テストが小さく、(合理的な範囲で) 1 つのことだけをテストする限り、モックから始めて突然、元に戻すために多くの努力をしなければならないことに気付くべきではありません。スタブに。

于 2010-05-04T14:19:44.520 に答える