Moq с аргументом действия

Пытаюсь использовать Moq 3.x, отлично работает. Однако у меня есть проблема, которую я не могу понять, как решить. Дано

public interface ITestSpec
{
  bool Run(Action<string, string> onIncorrectResponse);
}

Я пытаюсь сделать следующее:

var passingTestSpec = new Mock<ITestSpec>();
passingTestSpec
  .Setup(m => m.Run(null))
  .Returns(true);

Action<string, string> fakeAction =
  (expected, actual) => { throw new Exception("Should not run"); };

Assert.IsTrue(passingTestSpec.Object.Run(fakeAction));

Моя проблема в том, что любой вызов при передачеTestSpec.Object.Run(... какое-то действие...) возвращает false. Похоже, что библиотека Moq пытается сопоставить действие с аргументом, который я передал функции Run() в вызове Setup(), и терпит неудачу. На самом деле не имеет значения, какое действие я выполняю при вызове Run()... оно все равно возвращает false.

Есть идеи?

[Править] Я только что кое-что обнаружил; если я заменю строку настройки на

  .Setup(m => m.Run(fakeAction))

тест проходит. Однако я не могу знать, с каким действием будет вызываться метод .Run(), так что это не решение. Кто-нибудь знает эквивалент It.IsAny для действий?


person Marcel Popescu    schedule 17.05.2009    source источник


Ответы (1)


Что случилось с:

It.IsAny<Action<string, string>>()
person Jim Arnold    schedule 17.05.2009
comment
LOL Я должен был знать, что кто-то найдет решение ... подумать, что я потратил несколько часов на это :( Спасибо, я соглашусь с этим, это лучше, чем мое. - person Marcel Popescu; 17.05.2009