При выполнении второй строки этого кода Rhino Mocks генерирует исключение InvalidOperationException с сообщением «Это действие недопустимо, когда фиктивный объект находится в состоянии воспроизведения»
var mockScanner = MockRepository.GenerateMock<PortScanner>(null);
mockScanner.Expect((scanner => { scanner.Scan(null, null); }));
Проходя по коду в отладчике, можно увидеть, как отладчик запускает метод, определенный в классе, и сразу после выхода из этого метода возникает исключение.
Этот похожий код в другом тесте работает без проблем
var mockView = MockRepository.GenerateMock<IScanView>(null);
mockView.Expect(view => { view.Close(); });
var controller = new ScanController(mockView);
controller.Exit();
mockView.VerifyAllExpectations();
Единственное различие, которое я могу придумать, может иметь какое-либо значение между этими двумя тестами, состоит в том, что Exit является членом интерфейса, а Scan является виртуальным членом класса
Чего мне не хватает?
Обновление
Дальнейшие исследования показали, что это связано с тем, как Rhino обрабатывает виртуальные методы. Сейчас я сосредоточен на изучении документации