我正在开发一个asp.net mvc 3.0应用程序。在单元测试我的控制器中的一个动作方法时,我收到了一个错误。
如何模拟:Request.Params["FieldName"]
我已经包含了Moq框架,但不确定如何传递值
这是我的代码......请建议......
var request = new Mock<System.Web.HttpRequestBase>();
request
.SetupGet(x => x.Headers)
.Returns(
new System.Net.WebHeaderCollection
{
{"X-Requested-With", "XMLHttpRequest"}
});
var context = new Mock<System.Web.HttpContextBase>();
context.SetupGet(x => x.Request).Returns(request.Object);
ValidCodeController target = new ValidCodeController();
target.ControllerContext =
new ControllerContext(context.Object, new RouteData(), target);
答案 0 :(得分:11)
Params
是NameValueCollection
属性,可以与Headers
类似的方式进行设置:
var requestParams = new NameValueCollection
{
{ "FieldName", "value"}
};
request.SetupGet(x => x.Params).Returns(requestParams);
答案 1 :(得分:0)
模拟Context及其所有依赖项的另一种方法是在一个单独的类中抽象整个context / Params集合,然后模拟它。在许多情况下,这将使其更容易,并避免必须模拟复杂的对象图:
例如:
public void MainMethod()
{
var valueInQuestion = ISomeAbstraction.GetMyValue("FieldName");
}
您现在可以模拟GetMyValue
方法。