Как найти значение, которое было передано методу в моем mocked (Moq или Rhino Mocks) интерфейсе? - PullRequest
4 голосов
/ 26 ноября 2009

Я использую Moq - но мог бы легко переключиться на другой фиктивный фреймворк при необходимости .

У меня определен интерфейс:

public interface IBaseEngineManagerImp
{
   void SetClientCallbackSender(IClientCallbackSender clientCallbackSender);
}

Затем я высмеиваю IBaseEngineManagerImp с

mockEngineManagerImp = new Mock<IEngineManagerImp>();
EngineManager engineManager = new EngineManager(mockEngineManagerImp.Object);

engineManager затем вызывает SetClientCallbackSender , передавая значение.

Как я могу получить значение, которое было передано SetClientCallbackSender из моего модульного теста?

(я хочу вызвать некоторые методы для clientCallbackSender в рамках теста)

Ответы [ 2 ]

4 голосов
/ 26 ноября 2009

Вы можете использовать метод .Callback на макете, чтобы вызвать любую функцию для параметра, который был передан в метод SetClientCallbackSender:

mockEngineManagerImp.Setup(x => x.SetClientCallbackSender(It.IsAny<IClientCallbackSender>()))
            .Callback((IClientCallbackSender c) => c.DoSomething());
1 голос
/ 26 ноября 2009

В носороге вы используете WhenCalled или GetArgumentsForCallsmadeOn:

Thingy argument;
mock
  .Stub(x => x.SetClientCallbackSender(Arg<IClientCallbackSender>.Is.Anything))
  .WhenCalled(call => argument = (Thingy)call.Arguments[0]);
// act
//...
// assert
Assert.AreEqual(7, argument.X); 

Проблема этой реализации в том, что вы просто получаете последний аргумент. Вы можете лучше контролировать это, используя ограничения аргументов (вместо Is.Anything).

или

// act
//...
// assert
Thingy argument = 
  (Thingy)mock
    .GetArgumentsFormCalsMadeOn(x => x.SetClientCallbackSender(
      Arg<IClientCallbackSender>.Is.Anything))[0][0];

Проблема с GetArgumentsFormCalsMadeOn состоит в том, что он возвращает двумерный массив, строку для каждого вызова и столбец для каждого аргумента. Таким образом, вы должны точно знать, сколько вызовов выполняет тестируемое устройство.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...