Этот вопрос задавали бы много раз w.r.t к RhinoMocks , но я постараюсь представить немного по-другому. У меня такая ситуация ниже -
class A
{
X parentOfB;
A()
{
X parentOfB = someObj;
if(<something>)
{
B objB = parentOfB as B // NOTE THIS
if(objB.Foo) // call the property here
{
// some code ....
}
}
}
}
class B : X
{
// gets initialised to true somewhere in the program. Don't bother much
protected bool status ;
B() {}
// Property
public bool Foo
{
return status;
}
}
Mocking:
Теперь я хочу сделать что-то вроде этого -
var mock = new MockRepository();
var myObjB = mock.StrictMock<B>();
// call Db class to populate the objB object and then set the expectation as
// below
// ...
// ...
Expect.Call(myObjB.Foo).Return(true);
mock.ReplayAll();
var objA = new A();
mock.VerifyAll();
Ошибка:
Неверный вызов, последний вызов был использован или не был сделан (убедитесь, что вы вызываете виртуальный (C #) / Overridable (VB) метод).
Проблема в том, что конкретный класс B доступен в ctor of A для доступа к Свойству. Как мне справиться с этим сценарием в RhinoMocks ? Если я сделаю объект Foo виртуальным, он будет работать нормально. Но я не хочу этого делать.