2009-05-17 46 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