Как использовать MoqAutoMocker, который поставляется с StructureMap 2.5.3? - PullRequest
5 голосов
/ 03 июня 2009

Я пытаюсь использовать класс MoqAutoMocker, который поставляется с StructureMap, и я не могу найти никаких примеров того, как его следует использовать. Все, что мне нужно, это пример на сайте StructureMap, который использует RhinoMocks .

Я пытаюсь получить ссылку на одну из моих автоматически смоделированных / введенных зависимостей, используя метод Get. Согласно этой ссылке выше, я должен быть в состоянии сделать что-то вроде этого

    // This retrieves the mock object for IMockedService
    autoMocker.Get<IMockedService>().AssertWasCalled(s => s.Go());

Обратите внимание, как вы можете использовать AssertWasCalled, который указывает, что функция Get возвращает ссылку на объект RhinoMocks Mock? Этот же фрагмент кода не работает для меня, когда я использую MoqAutoMocker.

У меня есть класс SignInController, который зависит от ISecurityService в конструкторе. Использование MoqAutoMocker, как в примере используется RhinoAutoMocker, я думаю, что я смогу сделать это ...

var autoMocker = new MoqAutoMocker<SignInController>();
autoMocker.Get<ISecurityService>().Setup(ss => ss.ValidateLogin
(It.IsAny<string>(), It.IsAny<string>())).Returns(true); 

Но проблема в том, что я никогда не получаю доступ к методу установки. В этом случае вызов autoMocker.Get, похоже, возвращает экземпляр ISecurityService, а не Mock

Кто-нибудь успешно использовал MoqAutoMocker таким образом? Я просто делаю это неправильно?

Ответы [ 2 ]

10 голосов
/ 17 сентября 2009

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

var autoMocker = new MoqAutoMocker<SignInController>();
var mock = autoMocker.Get<ISecurityService>();
Mock.Get(mock).Setup(ss => ss.ValidateLogin
(It.IsAny<string>(), It.IsAny<string>())).Returns(true);

Я также разместил более длинный пример в своем блоге: Установка ожиданий с помощью MoqAutoMocker StructureMap .

1 голос
/ 28 октября 2015

autoMocker.Get<ISecurityService>()
вернет ISecurityService, и вы не сможете установить его. В отличие
Mock.Get(mock)
вернет Moq.Mock, тогда вы можете настроить его.

...