Как установить ожидание события при вызове метода? - PullRequest
2 голосов
/ 02 ноября 2009

Я реализовал интерфейс 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, кто-нибудь знает, как это сделать?

1 Ответ

2 голосов
/ 02 ноября 2009

Оказывается, я искал не в том месте. Я нашел ответ здесь .

Что мне нужно было сделать, это что-то вроде:

var _mock = MockRepository.GenerateMock<ITimer>();
_mock.Raise(x => x.Elapsed += null, this, EventArgs.Empty);
...