Moq с аргументом действия - PullRequest
6 голосов
/ 17 мая 2009

Я пытаюсь использовать 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));

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

Есть идеи?

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

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

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

1 Ответ

14 голосов
/ 17 мая 2009

Что не так с:

It.IsAny<Action<string, string>>()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...