RhinoMocks: очистить или сбросить AssertWasCalled () - PullRequest
5 голосов
/ 14 октября 2011

Как проверить, что макет вызывается в части "теста" моего теста, игнорируя любые вызовы макета в части "аранжировки" теста.

[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 (), потому что тест должен знать, сколько раз метод вызывается в установке.

Ответы [ 2 ]

5 голосов
/ 17 октября 2011

В этих ситуациях вместо заглушки я использую макет и комбинацию Expect и VerifyAllExpectations:

//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();

В этом случае ожидание возлагается на метод после завершения аранжировки.Иногда я думаю об этом как о своем собственном стиле тестирования: Arrange, Expect, Act, Assert

2 голосов
/ 16 октября 2011

Я перечитал ваш вопрос, и, похоже, вы хотите, чтобы какой-то метод разделял вызовы на макет на этапе «Аранжировка» и вызовы на макет на этапе «Акт».Я не знаю какой-либо встроенной поддержки для него, но что вы можете сделать, это передать обратный вызов с помощью 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);

Надеюсь, это поможет ...

...