2011-10-14 7 views
5

テストの「アレンジ」部分のモックへの呼び出しを無視して、テストの「動作」部分でモックが呼び出されることを確認するにはどうすればよいですか。RhinoMocks:ClearまたはReset AssertWasCalled()

[Test] 
public void ShouldOpenThrottleWhenDrivingHome() 
{ 
    var engineMock = MockRepository.GenerateStub<IEngine>(); 
    var car = new Car(engineMock); 
    car.DriveToGroceryStore(); // this will call engine.OpenThrottle 

    car.DriveHome(); 

    engine.AssertWasCalled(e => e.OpenThrottle()); 
} 

テストは、その後方法は、セットアップ中に呼び出された回数を知っていなければならないので、私は)新鮮なモックを注入または.REPEAT(に依存しようとしないことを好むだろう。

+1

これは既に尋ねられました:http://stackoverflow.com/questions/770013/rhino-mocks-how-to-clear前回の期待通りです。 –

+0

私はもう一度質問を読んだことがあります。おそらく重複はありませんが、正確に何が問題なのかよく分かりません。 ClearStub()は何をすべきですか?スタブはどこで初期化されましたか? –

+0

ええ、それは重複ではありません。私は質問を編集した、うまくいけばそれはより明確である。 –

答えて

5

を役に立てば幸い:

//Arrange 
var engineMock = MockRepository.GenerateMock<IEngine>(); 
var car = new Car(engineMock); 
car.DriveToGroceryStore(); // this will call engine.OpenThrottle 

engineMock.Expect(e => e.OpenThrottle()); 

//Act 
car.DriveHome(); 

//Assert 
engineMock.VerifyAllExpectations(); 

この場合、アレンジが完了した後にメソッドに期待がかかります。時々私はこれを独自のテストスタイルと考えています:アレンジ、期待、アクト、アサート

1

私はあなたの質問を読み返しました。アレンジ段階のモックへのコールとアクト段階のモックへのコールの間で、いくつかの方法を分離したいと思われるようです。組み込みのサポートは分かりませんが、できることはWhenCalledを使用してコールバックを渡すことです。あなたのケースでは、コードは次のようなものになるだろう:

// Arrange 
var engineMock = MockRepository.GenerateStub<IEngine>(); 
var car = new Car(engineMock); 
int openThrotlleCount = 0; 
engineMock.Expect(x => x.OpenThrottle(arg)).WhenCalled(invocation => openThrotlleCount++); 
car.DriveToGroceryStore(); // this will call engine.OpenThrottle 
var openThrottleCountBeforeAct = openThrotlleCount; 

// Act 
car.DriveHome(); 

// Assert 
Assert.Greater(openThrotlleCount, openThrottleCountBeforeAct); 

が、それは私が代わりにExpectVerifyAllExpectationsのスタブとの組み合わせのモックを使用するこのような状況では...

関連する問題