2009-04-07 1 views
1

私は現在、私がMVPモデルで持っているプレゼンターをテストするテストを持っています。私の発表者には、私のテストで嘲笑された私のビューに呼び出すプロパティがあります。私のテストの初期化では、プレゼンターのビューをモックされたビューに設定した後、このメソッドを呼び出すプレゼンターにプロパティを設定しました。Rhino Mockを使用すると、テストの初期化中にプロパティを嘲笑して呼び出すと、実際の呼び出し#1、実際の呼び出し#0が返されるのはなぜですか?

私のテストでは、私は私が呼び出すメソッドのExpect.Callを持っていない、まだ私が実行したときに、私はこのRhinoのモックの例外を取得:

Rhino.Mocks.Exceptions.ExpectationViolationException:IView.MethodToInvoke();予想される#1、実際の#0 ..

私がRhinoのモックで理解していることは、予期しているブロックの外のモックを呼び出す限り、これを記録してはいけません。私は渡すべきテストを想像するだろう。それは通過していない理由はありますか?

以下は、私の設定を示すコードです。

public class Presenter 
{ 
    public IView View; 

    public Presenter(IView view) 
    { 
     View = view 
    } 
    private int _property; 
    public int Property 
    get { return _property;} 
    set 
    { 
     _property = value; 

     View.MethodToInvoke(); 
    } 
} 

...以下は、テストコード...

[TestInitialize] 
     public void Initilize() 
     { 
      _mocks = new MockRepository(); 
      _view = _mocks.StrictMock<IView>(); 
      _presenter = new Presenter(_view); 
      _presenter.Property = 1;    
     } 
[TestMethod] 
     public void Test() 
     { 
      Rhino.Mocks.With.Mocks(_mocks).Expecting(delegate 
      {     
      }).Verify(delegate 
      { 
       _presenter.SomeOtherMethod(); 
}); 
     } 

答えて

1

なぜテストを実行するたびに同じことをテストしたいのですか?

特定のことが起こったかどうかをテストする場合は、1回のテストでそのことを確認する必要があります。

あなたが今使用しているパターンは、あなたが する必要があることを意味します - テスト するための前提条件を設定する - 行動 を行う - その行動が正しい でチェックし

あなたがする必要がある1回のテストでそれを数回繰り返し、テストごとに1つテストを開始し、テストをより明確にし、AAA構文を使いやすくします。

あり、ここで議論するいくつかのことですが、あなたはそれ何かのようにやった場合、それは確かに明確に次のようになります。ここでは3.5構文Rhinoのモックの詳細記事を読むまで

[TestMethod] 
ShouldCallInvokedMethodWhenSettingProperty() 
{ 
    var viewMock = MockRepository.GenerateMock<IView>() 

    var presenter = new Presenter(viewMock); 

    presenter.Property = 1; 

    viewMock.AssertWasCalled(view => view.InvokedMethod()); 

} 

http://ayende.com/Wiki/Rhino+Mocks+3.5.ashx

0
  1. あなたは試験方法でテストするために、正確に何をしようとしていますか?
  2. 厳密なモックを使わないでください。
  3. Rhino's AAA syntax (Arrange, Act, Assert)を使用することをおすすめします。
0

厳しいモックで起こっていることを記録/理解していない私には嘘がありました。この問題を解決するために、私はTestInitilize関数をどのように変更したのですか?この基礎は私のすべてのテストのために設定している私の初期状態の簡単なテストを行います。

[TestInitialize] 
    public void Initilize() 
    { 
     _mocks = new MockRepository(); 
     _view = _mocks.StrictMock<IView>(); 
     _presenter = new Presenter(_view); 

     Expect.Call(delegate { _presenter.View.InvokedMethod(); }); 
     _mocks.ReplayAll(); 
     _mocks.VerifyAll(); 
     _mocks.BackToRecordAll(); 
     _presenter.Property = 1; 
    } 
+0

ここでも、あなたは確信していますあなたは厳格な嘲笑が必要ですか?あなたのシナリオは、あなたがすべての期待を指定するよう強制されない普通のモックを使用するようなものになります。 AAAを使用する場合は、コードを書く方がはるかに簡単です。 –

関連する問題