2012-08-15 21 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