2011-02-03 6 views
0

TDDとMVPパターンを使用して小さなアプリケーションを作成したビデオを見ました。このビデオはここに表示されます:TDDモデルのプレゼンターをMOQで表示

http://blog.jpboodhoo.com/content/binary/appliedTestDrivenDevelopmentPart3/appliedtestdrivendevelopmentpart3.swf

ビデオはRhino Mocksを使用していますので、MOQを使用して同じテストをどのように達成できるかについては誰でも気軽にご確認ください。

私は以下のコードを使って、Init()メソッドをテストするために(MOQを使って)テストを書く方法を教えてください。

public interface IGui 
{ 
    event eventhandler UpdateFromDataSource; 
} 

public class Gui :IGui 
{ 
    button.Click += delegate { UpdateFromDataSource(); } 
} 

public class GuiPresenter 
{ 
    IGui gui; 
    public GuiPresenter(IGui gui) 
    { 
     this.gui = gui; 
    } 

    public Init() 
    { 
     gui.UpdateFromDataSource += delegate {//something}; 
    } 
} 

おかげ

CA

答えて

0

のInit()は、任意の所望の出力を生成しない場合、私はGuiPresenterにInitメソッドをテストする気にしないでしょう。

あなたは何を試そうとしていますか?

0

GUIのUpdateFromDataSourceイベントにワイヤードアップハンドラがあることをテストします。ですから、GUIのモックを作成し、InitがGui Mockオブジェクトと呼ばれるときにそれをテストできるようにしたいです。 UpdateFromDataSourceには少なくとも1つのイベントハンドラがあります。

私はこのビデオのものと同様のテストをしたいと思います。 http://blog.jpboodhoo.com/content/binary/appliedTestDrivenDevelopmentPart3/appliedtestdrivendevelopmentpart3.swf

ビデオはRhino MockではなくMoq!を使用しています。

+0

呼び出された場合は、常にデリゲートにイベントをキャストしてありますどのように多くの主張ができ起こるべきプレゼンターにおける状態の変化を確認します。使用する正確なメンバーを覚えていないが、私は彼らがそこにいることを知っている。つまり、これらのテストではイベントにリスナーがあることを確認するだけです。正しいリスナーであるか、正しいことをしているかは分かりません。結果をテストする:ボタンがクリックされたときに何が起こりたいですか?そのビデオを忘れて、それは多くの人のうちのただ1つのアプローチです。 –

0

私はそのようなイベントに基づいたアプローチでは悪い経験をしています。あなたが発見したように、模擬してテストするのは難しいですが、実際に何も得ずに、より簡単なコードをより難しいものに置き換えています。これらのイベントをアクティブ化するためにグルーコードを書く必要があります。イベントは、適切にリリースされないとメモリリークに変わることがあります。また、コード内をナビゲートするのが難しいため、厄介なバグもあります。

これらのイベントをプレゼンターのメソッドに変換して、ビューで直接呼び出せるようにする方が簡単です。テストするのは簡単ですが、モックに対してテストを書くのは難しく、かなり無意味です。

0

したがって、InitがViewのイベントをプレゼンタの対応するハンドラに接続していることをテストしたいとします。

Iは、例えば、模擬イベントを発生させるプレゼンタインスタンスに

  • を渡し

    • モック図
    • を作成しmockView.Raise(m => m.UpdateDataSource()+= null)
    • ハンドラ(//something)は
  • 関連する問題