Moq with Action参数

时间:2009-05-17 17:33:50

标签: c# 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));

我的问题是对passTestSpec.Object.Run(......某些动作......)的任何调用都返回false。似乎Moq库试图将操作与我在Setup()调用中传递给Run()的参数进行匹配,并且失败。实际上我在Run()调用中放了什么动作并不重要......它仍然返回false。

有什么想法吗?

[编辑]我刚刚发现了一些东西;如果我用

替换设置行
  .Setup(m => m.Run(fakeAction))
测试通过了。但是,我不知道将调用.Run()方法的操作,因此这不是一个解决方案。有人知道It.IsAny等同于行动吗?

1 个答案:

答案 0 :(得分:14)

出了什么问题:

It.IsAny<Action<string, string>>()