c# unit-testing rhino-mocks

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.