c# - Cómo configurar la llamada Expect para verificar que no se llame a un método en Rhino Mocks
unit-testing rhino-mocks (4)
Utilizando Rhino Mocks, ¿cómo me aseguro de que no se llame a un método al configurar las Expectativas en el objeto simulado?
En mi ejemplo, estoy probando el método Commit y necesito asegurarme de que no se llame al método Rollback mientras se realiza la confirmación. (Esto se debe a que tengo lógica en el método de confirmación que se revertirá automáticamente si falla la confirmación)
Así es como se ve el código ...
[Test]
public void TestCommit_DoesNotRollback()
{
//Arrange
var mockStore = MockRepository.GenerateMock<IStore>();
mockStore.Expect(x => x.Commit());
//here i want to set an expectation that x.Rollback() should not be called.
//Act
subject.Commit();
//Assert
mockStore.VerifyAllExpectation();
}
Por supuesto, puedo hacer esto en la fase Assert así:
mockStore.AssertWasNotCalled(x => x.Rollback());
Pero me gustaría establecer esto como una Expectativa en primer lugar.
¿Esto es lo que estás buscando?
ITest test = MockRepository.GenerateMock<ITest>();
test.Expect(x => x.TestMethod()).AssertWasNotCalled(mi => {});
Aquí hay otra opción:
mockStore.Stub(x => x.DoThis()).Repeat.Times(0);
//EXECUTION HERE
x.VerifyAllExpectations();
Otra opción sería:
mockStore.Expect(x => x.Rollback()).Repeat.Never();
Para este caso creé un método de extensión para mostrar mejor mi intención.
public static IMethodOptions<RhinoMocksExtensions.VoidType> ExpectNever<T>(this T mock, Action<T> action) where T : class
{
return mock.Expect(action).IgnoreArguments().Repeat.Never();
}
Tenga en cuenta la llamada IgnoreArguments (). Supongo que no desea que se llame nunca al método ... independientemente de los valores de los parámetros.