Я реализовал интерфейс ITimer, потому что хочу написать несколько тестов вокруг класса, который я создаю, который использует класс System.Timers.Timer.
Итак, последовательность начинается, когда я вызываю Timer.Start() через некоторое время. Я ожидаю, что произойдет событие Elapsed.
Однако для моего теста я хочу издеваться над этим поведением, потому что я не хочу ждать определенного количества времени для события (я хочу, чтобы это произошло немедленно).
Я пытался издеваться над методом Start и просто его поднять, но я не знаю, как это сделать.
Это то, что у меня есть до сих пор:
var _mock = MockRepository.GenerateMock<ITimer>();
//this is what I'd like to do but it doesn't work
Expect
.Call(_mock.Start())
.WhenCalled( () =>
{
if (_mock.Elapsed != null)
_mock.Elapsed();
});
Проблема, которую я получаю, заключается в том, что компилятор сообщает мне, что событие может использоваться только в контексте операции + = или - =.
Должен быть способ сделать это с помощью Rhino Mocks, кто-нибудь знает, как это сделать?
Оказывается, я искал не то место. Я нашел ответ здесь.
Мне нужно было что-то в этом роде:
var _mock = MockRepository.GenerateMock<ITimer>();
_mock.Raise(x => x.Elapsed += null, this, EventArgs.Empty);