質問

私はこれを読みました: http://martinfowler.com/articles/mocksArentStubs.htmlスタブとモックに関する私の概念は明確です。私は moq や rhinomocks などの分離フレームワークの必要性を理解しており、モック オブジェクトを作成するのが好きです。モックとして、期待の実際の検証に参加します。しかし、なぜスタブを作成するためにこれらのフレームワークが必要なのでしょうか。私はむしろ、手作りのスタブを展開してさまざまなフィクスチャで使用することを好みます。

役に立ちましたか?

解決

手作業で作成したスタブの方が良い選択肢であると判断する前に、Rhino Mocks のようなライブラリを 1 日か 2 日使ってみたことはありますか?

@ちば市:ライブラリのモックに関する全体的な考え方は次のとおりです。 避ける 実装。単一のプロパティの値を設定する必要があるだけの場合、インターフェイスの実装全体を作成する必要はありません。次のようなコードを呼び出す

MyObj obj = MockRepository.GenerateStub<MyObj>();
obj.MyProperty = 33;

私にはもっと簡単に思えます。ダムスタブをパラメータとして渡すだけでよく、それに何が起こるかは気にしない(したがってセットアップは必要ありません)という状況は言うまでもありません。

これは、より複雑なシナリオのために独自のスタブをロールアウトすべきではないという意味ではありませんが、私の経験ではそのようなケースはまれです。

私がお勧めするのは、優れたモック ライブラリ (Rhino など) の使い方を、その小さなトリックを駆使して学ぶことです。きっとすぐにその存在理由を理解できるようになるでしょう。

他のヒント

厳密に言えば、いいえ、そうではありません 必要 スタブを作成するための分離フレームワーク。実際、Microsoft には スタブフレームワーク それ のみ モックではなくスタブを生成します。

私自身、分離フレームワークを書いたことはありませんが、オブジェクト モックを一旦導入してしまえば、スタブを簡単に作成できるように思えます。これが、ほとんどまたはすべての分離フレームワークにスタブ オブジェクトが含まれる主な理由である可能性があります。

最後の文 (「手作りのスタブをロールアウトして、さまざまなフィクスチャで使用することを希望します」) に関しては、実際に大規模なプロジェクトでそれを試したことがありますか?確かに、null 許容の bool を返す 1 つのメソッドを備えたインターフェイスがあるかもしれません。そのインターフェイスに対して 3 つのスタブを作成するだけで済み、それはそれほど悪いことではありません。

しかし、一度見始めると、 数十の インターフェイスやクラスをスタブに追加すると、さまざまなスタブをすべて追跡するのが非常に面倒になります。複数のテストで各スタブを使用している場合は、スタブを手書きして脇に置いておくことは確かに正当化できます。ただし、1 つの特定のスタブを 1 回か 2 回しか使用しない場合は、簡素化のために、フレームワークによって直接生成された「匿名」スタブとして保持する方がはるかに簡単です。

しばらくモック フレームワークを使用した後、コード設計がまったく異なる方向に傾いていることがわかりました。この傾向は、よりインタラクション スタイルに向けられているようです。言い換えれば、状態よりもメッセージや行動に興味を持つようになります。私のオブジェクトは、スタブを使用する場合のようなステートフル オブジェクトではなく、サービスになります。スタブを使用すると、最終的に状態を他のオブジェクトに渡すことになります。

私にとっての問題は、抽象化レイヤーを作成することになります。何かが特定のレベルで相互作用するべきかどうかについて疑問を持たなければなりません。これは、「最後の責任ある瞬間」を作成するのに役立ちます。したがって、プロデューサーとコンシューマーを持つオブジェクトが作成されます。そして、その間にあるものはすべて単なるメッセージ チャネルです。

これがお役に立てば幸いです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top