Я пытаюсь издеваться над ToString()
вызовом моего пользовательского объекта. Я создал макет для интерфейса и установил ожидание на ToString()
call
interface ICustomObject
{
}
var customObjectMock = MockRepository.GenerateMock<ICustomObject>();
var fakeDump = Guid.NewGuid().ToString();
customObjectMock.Expect(c => c.ToString()).Return(fakeDump).Repeat.Any();
Во время пробного запуска я получил исключение времени выполнения, говорящее:
System.InvalidOperationException: неверный вызов, последний вызов
был использован или не было сделано (убедитесь, что вы звоните
виртуальный (C #).
Общеизвестная ошибка, но почему я ее получил, учитывая, что ToString()
является виртуальным?
И еще интереснее - я обошел это, просто определив ToString()
явно в интерфейсе:
interface ICustomObject
{
// Weird! I believe such method definition in interface would be confusing
// without a special remark comment saying that this method is redefined
// to satisfy RhinoMocks (perhaps Reflection?)
string ToString();
}
После этого RM позволяет установить ожидания на ToString()
.
Просто интересно, почему RinoMocks обязывает меня переопределить стандартное виртуальное Object.ToString()
? Возможно, RM не рассматривает такие стандартные методы, которые доступны для каждого объекта Framework, и обязывает переопределять все методы / свойства явно, чтобы иметь возможность устанавливать ожидания?