2009-06-29 7 views
5

私はArcGISの単体テストを変更しようとしています。私はmocksを使用しています(私はrhinoを使用しています)。
私がテストを書くのを始めたとき、私は多くのオブジェクトを嘲笑し始める必要があることに気付きました。例えば
- 私のコントローラは、最初のRelationshipClassを取得します(私はIWorkspaceと返さIRelationshipClassをスタブする必要があります)、その後もIFeature(スタブ)を取得し、最終的には他のIFeaturesISetを返すために、stubRelClass.GetRelatedObjects(stubFeature)を呼び出します。ユニットテストの臭い

正常に通過するには多くのオブジェクトやメソッドをスタブするのが普通ですか?私はまた 私は本当にコードをステップする必要があるように感じる(ええ - 私は最初にテストを書いておくべきであることを知っている、私はまだこれをしようとしている)、次に何をスタブアウトするかを理解するために、 。

私はまた、複数のインターフェイスを実装するcomクラスを嘲笑することに問題があります。プロダクションコードでは、インターフェイス間でそれらをQIします。実行時に両方のインタフェースを実装するモックを作成するにはどうすればよいですか?

答えて

3

あなたの射出チェーンによっては、多くの場合、たくさんの物を模擬する必要があります。しかし、複数のレベルに深くかかわっている場合は、設計上の障害を示す可能性があります.3層のデータに依存しているオブジェクトは、疎結合していない可能性があります。必要に応じてテストしているレイヤーに必要なプロパティを持つある種の偽のオブジェクトを返すだけで、芽のチェーンを挟むことができます。

また、[SetUp]メソッドであなたのモックの大部分を実行してから、各テストで1つまたは2つのものを変更することができます。

複数のインターフェイスをモックするために、RhinoにはMultiMockという概念があります。それは私がhttp://misko.hevery.com/code-reviewers-guide/を読んで推薦

:-(香りでテスト不能コード、のように聞こえる著者はグーグルを教えるための責任のコーチである私には

var mock = 
    MockRepository.DynamicMultiMock<MyType>(
       typeof(Interface1), 
       typeof(Interface2), 
       ....); 
+0

- (この1つの目的は、彼らのためにカバーしますので)それはいくつかのより多くのオブジェクトをあざけるから私を「保存」しますが、私はまだについてのモックする必要があるだろう同じ量のメソッド、そうですか?それとも、私はこれを間違っていますか? –

+0

重要なのは、より多くのオブジェクトを嘲笑することから "あなたを救う"ことではありません。要点は、そこに不足している概念があることをテストで伝えようとしていることです。そのため、それはとても複雑です。 –

2

:私はあなたが後にしている構文があると信じてこの記事では、テスト可能なコードとテストできないコードを書く方法を示します。

さらに推奨される読書: クリーンコード(Robert C. Martin) - クリーンなコードの書き方(テスト可能)コード 従来のコードで効果的に作業する(Michael Feather) - テストされていないコードとテストできないコードを制御する方法を示します。

+0

あなたが短い商業休憩を気にしないなら... http://www.mockobjects.com/book –

3

高結合の兆候である可能性があります。これは、依存性を減らす必要があることを意味します(設計とテスト容易性が向上します)。大まかなガイドラインとして、オブジェクトには最大約4-6人の共同編集者が必要です。それ以上のものは私の警報を止めるでしょう。

深いレベルをカットするオブジェクト導入について

How are Mocks meant to be used?

関連する問題