У меня есть класс, который имеет свойство, которое мне нужно заглушить. Я не могу передать его как часть конструктора, потому что объект, строящий его, не знает параметры конструктора.Rhino Mocks, Интерфейсы и свойства
При выполнении модульных тестов я хочу, чтобы свойство было создано как заглушка.
Это то, что я пытался, но он не работает:
private DeviceMediator deviceMediator;
private IDeviceControlForm deviceControlForm;
private IDataAccess data;
private ICallMonitor callMonitor;
// Use TestInitialize to run code before running each test
[TestInitialize()]
public void MyTestInitialize()
{
// This line works fine
deviceControlForm = MockRepository.GenerateStub<IDeviceControlForm>();
// This line works fine
data = MockRepository.GenerateStub<IDataAccess>();
// This has to be an ICallMonitor. If I try to make it a
// CallMonitor then it fails.
callMonitor = (CallMonitor)
MockRepository.GenerateStub<ICallMonitor>();
// This line does not compile. Because it wants to
// return a CallMonitor not an ICallMonitor.
Expect.Call(new CallMonitor(null)).Return(callMonitor);
// This is the class that has the CallMonitor (called callMonitor).
deviceMediator = new DeviceMediator(deviceControlForm, data);
}
Есть в любом случае, чтобы поймать вызов конструктора к CallMonitor и сделать это на самом деле быть заглушки?
В случае необходимости, здесь соответствующий код в DeviceMediator:
private IDeviceControlForm form;
private readonly IDataAccess data;
public ICallMonitor CallMonitor { get; set; }
public DeviceMediator(IDeviceControlForm form, IDataAccess data)
{
this.form = form;
this.data = data;
CallMonitor = new CallMonitor(OnIncomingCall);
}
Заранее спасибо за любую помощь.
Я думаю, что это путь. (Я могу переместить конструктор callMonitor для вызова другого метода.) – Vaccano