Чего можно ожидать от данного события, используя nMoq?

StackOverflow https://stackoverflow.com/questions/3325729

  •  29-09-2020
  •  | 
  •  

Вопрос

Допустим, я хочу провести модульный тест, в котором у меня есть игра «Тетрис», и я хочу запустить игру, ничего не делать и дождаться окончания игры (то есть получить событие GameOver):

Tetris tetris = new Tetris();
tetris.GameOver += something;
tetris.Start();

Как мне сделать тест?Вероятно, это должно быть легко, но я не понимаю, как это сделать.Моя единственная идея была бы что-то вроде:

Tetris tetris = new Tetris();
tetris.GameOver += delegate() { Assert.True(); };
tetris.Start();

Спасибо

Это было полезно?

Решение

Предполагая tetris.Start() является синхронным, вы можете подать сигнал тесту с помощью обработчика событий:

Tetris tetris = new Tetris();
bool wasRaised = false;
tetris.GameOver += delegate() { wasRaised = true; };
tetris.Start();
Assert.IsTrue(wasRaised);

Если вызов асинхронный, вам необходимо синхронизировать вызов, чтобы добраться до Assert в контексте теста.

Другие советы

Я написал маленький класс помощника, который мне нравится использовать.Вы можете найти Класс здесь и Установки тестов для класса здесь .Вы можете чувствовать себя свободно использовать его, но, пожалуйста, используйте на свой собственный риск.Я использую это для моих тестов, но вполне возможно, что есть ошибки.Для вашего случая, использование класса будет выглядеть так:

        Tetris tetris = new Tetris();
        using (EventAssertion.Raised(tetris, "GameOver").OnlyOnce().Go())
        {
            tetris.Start();
        }
.


Редактировать: Похоже, что он также требует emithelpers .

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top