Al ejecutar la segunda línea de este código burla de Rhino lanza un InvalidOperationException con un mensaje "Esta acción no es válido cuando el objeto maqueta está en estado de reproducción"¿Cuándo un objeto simulado ingresa al estado de reproducción?
var mockScanner = MockRepository.GenerateMock<PortScanner>(null);
mockScanner.Expect((scanner => { scanner.Scan(null, null); }));
recorrer el código en un depurador se puede ver la El depurador ejecuta el método definido en la clase e inmediatamente después de que el control deja este método, se produce la excepción.
Este código similar en otra prueba hace el trabajo sin ningún problema
var mockView = MockRepository.GenerateMock<IScanView>(null);
mockView.Expect(view => { view.Close(); });
var controller = new ScanController(mockView);
controller.Exit();
mockView.VerifyAllExpectations();
La única diferencia de que se me ocurre que podría ser de cualquier consequense entre theese dos pruebas es que la salida es un miembro de una interfaz mientras Scan es un miembro virtual en una clase
¿Qué me estoy perdiendo?
actualización
La exploración adicional ha indicado que esto está relacionado con la forma en que maneja Rhino métodos virtuales. Me estoy centrando en el estudio de la documentación ahora.
Acabo de leer sobre hacer esto hoy. El enlace de documentación a la entrada de la wiki de Rhino Mocks es: http://ayende.com/Wiki/(S(vcy2bn55h5cja0vsedn14y45))/Rhino+Mocks+-+Internal+Methods.ashx –