2011-07-29 10 views
23

Usando Rhino Mocks, ¿cómo me aseguro de que no se invoque un método mientras configura las Expectativas en el objeto simulado?Cómo establecer la llamada Esperar para verificar que no se llame a un método en Rhino Mocks

En mi ejemplo, estoy probando el método Commit y necesito asegurarme de que no se invoque el método Rollback mientras realizo la confirmación. (Esto es porque tengo la lógica en el método commit que va a deshacer de forma automática si confirmación falla)

Así es como el código es el siguiente ..

[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, no puedo hacer esto en fase de Assert como esto :

mockStore.AssertWasNotCalled(x => x.Rollback()); 

Pero me gustaría establecer esto como una Expectativa en primer lugar.

+0

¿Por qué quiere usar Expectation, y no solo opta por AssertWasNotCalled? – Cousken

+0

@Cousken AssertWasNotCalled() no parece funcionar con BackToRecord() y Replay(), tal vez esa es la razón ?? – danio

Respuesta

8

¿Esto es lo que estás buscando?

ITest test = MockRepository.GenerateMock<ITest>(); 
test.Expect(x => x.TestMethod()).AssertWasNotCalled(mi => {}); 
+0

@Santhosh: ¿funciona para usted? – sll

+0

esto no funcionó para mí –

34

Otra opción sería:

mockStore.Expect(x => x.Rollback()).Repeat.Never(); 
3

Aquí hay otra opción:

 mockStore.Stub(x => x.DoThis()).Repeat.Times(0); 

     //EXECUTION HERE 

     x.VerifyAllExpectations(); 
2

Para este caso he creado 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(); 
} 

Observe la llamada IgnoreArguments(). Supongo que no quiere que se llame al método nunca ... sin importar el valor del parámetro.

Cuestiones relacionadas