Я пытаюсь написать тест взаимодействия, который должен запустить событие в классе, который мне не принадлежит (среда C # 4.0):
public class DoNotOwn
{
public event EventHandler<SomeEventArgs> SomeEvent;
}
DoNotOwn не предоставляет защищенного OnSomeEvent для переопределения и не реализует никаких интерфейсов или каких-либо виртуальных членов. Тестируемый класс имеет экземпляр DoNotOwn и подписывается на SomeEvent:
public class ClassUnderTest
{
private DoNotOwn x;
public SetupDoNotOwn(DoNotOwn arg)
{
x = arg;
x.SomeEvent += MyEventHandler;
}
protected void MyEventHandler(object sender, SomeEventArgs args)
{
// Does work that needs to be tested
}
}
Мне известно, что я мог бы сделать отдельный метод доступным для теста, который выполняет внутренние функции MyEventHandler, но мне интересно, есть ли способ вызвать фиктивное событие DoNotOwn для запуска этого события.
У меня есть RhinoMocks, доступные в окружающей среде. Мои попытки вызвать это событие либо не приводят ни к какому событию, ни к жалобе «Неверный вызов, использовался последний вызов или не был сделан вызов (убедитесь, что вы вызываете виртуальный ... метод)», например с:
DoNotOwn stub = MockRepository.GenerateStub<DoNotOwn>();
stub.SomeEvent += null;
IEventRaiser eventer = LastCall.GetEventRaiser(); // InvalidOperationException
Я бы хотел попробовать Мок. Типок не в бюджете.