2009-05-17 52 views
5

我正在尝试使用Moq 3.x,它的工作非常好。但是,我有一个问题,我无法弄清楚如何解决。鉴于Moq with Action参数

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库正在尝试将该操作与我在Setup()调用中传递给Run()的参数进行匹配,并且失败。实际上,我在Run()调用中放置什么操作并不重要......它仍然返回false。

任何想法?

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

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

代替测试通过。但是,我不知道将调用.Run()方法的操作,所以这不是一个解决方案。任何人都知道一个It.IsAny等同于行动?

回答

13

出了什么问题:

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

LOL我应该知道有人会找到解决办法......认为我浪费了几个小时,在这个:(谢谢,我也有去,这是更好比我的。 – 2009-05-17 17:50:58