2012-08-15 16 views
0

我試圖單元測試我的路線,我開始出現問題。一些動作方法參數不會再來自URL,而是由基於本文的動作過濾器提供:http://haacked.com/archive/2010/02/21/manipulating-action-method-parameters.aspxShouldMapTo - 數據不在url中?

問題是我有一個url:/some/path/id它映射到動作方法public ViewResult Action(int id, Guid sessionId)其中sessionId正在通過動作過濾器添加到動作parmaters。現在有現在的方式,我可以看到使這個測試通過未做Guid一個Guid?

"~/some/path/1".ShouldMapTo<SomeController>(x => x.Action(1, <anyGuid>)); 

任何想法?

回答

1

現在我沒有辦法讓這個測試通過而沒有使Guid成爲Guid?

那麼其實有一種方法。

如果您正在使用犀牛製品(這是在默認情況下MvcContrib.TestHelper捆綁在一起,所以你已經隱含地使用它):

"~/home/action/1" 
    .ShouldMapTo<SomeController>(x => x.Action(1, Arg<Guid>.Matches(y => true))); 

,如果您使用的起訂量:

"~/some/action/1" 
    .ShouldMapTo<SomeController>(x => x.Action(1, It.IsAny<Guid>())); 

和如果您正在使用其他一些模擬框架,請查看關於語法的文檔,以便您可以指定任何參數約束。

+0

哇,我只是希望我可以用Moq的'It.IsAny ',但我沒有想到它實際上會起作用。謝謝! – Andy 2012-08-16 11:32:06