Выполнение действий вызывается в модульном тесте silverlight с MOQ - PullRequest
3 голосов
/ 19 ноября 2010

Допустим, у меня есть это

_articlesService.SaveAsync(Model, AddressOf OnSaveCompleted)

Метод OnSaveCompleteMethod делает несколько вещей, очевидно.Это

Protected Overridable Sub OnSaveCompleted(ByVal asyncValidationResult As AsyncValidationResult)

В моем тесте.Мне нужно запустить фиктивную SaveAsync, и в любом случае вызывать OnSaveCompleted, потому что метод отправляет события, которые мне нужно знать, были отправлены.

Сейчас код просто проходит мимо этого метода, таким образом, его никогдаВыполнено.

Нужна помощь в решении этой проблемы, потому что я застрял прямо сейчас.

Ответы [ 2 ]

1 голос
/ 21 ноября 2010

Если я правильно понимаю ваш контекст:

  • у вас тестируемый класс, который использует ArticlesService
  • ваш ArticlesService (сотрудничающий класс) отвечает за отправку некоторых событий
  • вы хотите убедиться, что тестируемый класс ведет себя правильно
  • вы хотите сделать это, проверив события.

Если это так, вы, возможно, возлагаете на свой класс ответственность за большее, чем нужно. Вам нужно только убедиться, что ArticlesService был задан SaveAsync. Вам не нужно беспокоиться о том, что остановил и сделал ArticlesService.

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

Вместо того, чтобы микроуправлять классами, вы можете написать отдельный тест, в котором приведены некоторые примеры того, как будет работать ArticlesService, который проверит, правильно ли выполняет ArticleService свою работу . Ответственность вашего CUT заключается в том, чтобы эффективно делегировать эту работу.

Если вам действительно нужно, чтобы события вызывались так, чтобы ваш CUT мог отвечать, это отдельный аспект его поведения, и вы можете сделать это с помощью метода Moq "Raise", описанного в "Events", здесь:

http://code.google.com/p/moq/wiki/QuickStart

Редактировать: Вы также можете использовать «CallBack», задокументированный по той же ссылке, чтобы делать вещи с передаваемыми вам аргументами, включая OnSaveCompleted. Не уверен, поможет ли это или нет; сложно увидеть, что ты делаешь без кода и провального теста. В любом случае, удачи!

0 голосов
/ 22 ноября 2010

Закрыть, но не совсем так.

На самом деле мы не отправляем событие в ArticleService.

Метод SaveAsync принимает статью для сохранения и метод, который вызывается после завершения сохранения.

Проблема в том, что метод OnSaveCompleted не вызывается. (Этот метод существует в классе View Model Base, поэтому служба не отправляет событие, а viewmodel.).

Но у нас есть собственная реализация прокси-служб WCF, так что это, вероятно, то, что нам мешает, поскольку мы не используем сгенерированный код.

Думаю, что для решения этой проблемы нам придется переделать нашу инфраструктуру в службах abit.

Так что это особый случай, просто хотел выбросить вопрос на всякий случай. :)

В любом случае, спасибо за ответ.

...