2011-10-14 10 views
5

¿Cómo puedo verificar que se llame a un simulacro en la parte de "acto" de mi prueba ignorando cualquier llamada al simulacro en la parte de "arreglos" de la prueba?RhinoMocks: Borrar o restablecer 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()); 
} 

prefiero no probar un inyecte una maqueta fresca o confiar en .Repeat() porque la prueba a continuación, tiene que saber cuántas veces se llama al método en la configuración.

+1

Este ya se le preguntó: http://stackoverflow.com/questions/770013/rhino-mocks-how-to-clear -previous-expectations-on-an-object –

+0

He leído la pregunta nuevamente, probablemente no es un duplicado, pero no estoy seguro de cuál es exactamente la pregunta. ¿Qué debería hacer ClearStub()? ¿Dónde se inicializaron los talones? –

+0

Sí, eso no es un duplicado. He editado la pregunta, espero que sea más clara. –

Respuesta

5

En estas situaciones que utilizo una maqueta en lugar de un talón y la combinación de Expect y 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(); 

En este caso, la expectativa se coloca en el método una vez que se ha completado la organización. A veces pienso en esto como su propio estilo de prueba: Organizar, esperar, actuar, afirmar

1

He vuelto a leer su pregunta y parece que desea algún método para separar las llamadas al simulacro durante la etapa Organizar y las llamadas al simulacro durante la etapa Actuar. No conozco ninguna compatibilidad incorporada, pero lo que puede hacer es pasar una devolución de llamada usando WhenCalled. En su caso, el código sería algo como:

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

creo que sirve ...

Cuestiones relacionadas