2014-04-21 103 views
1

下面是我的控制器的方法: -如何单元测试Request.Form [“”]?

[HttpPost] 
    public ActionResult Search(SearchViewModel model) 
    { 
     string selection = Request.Form["Options"]; 
     if (selection == "str1") 
     { 
      ----------------------------- 
     }   
    } 

而且它基于的条件,其中来自Request.Form.But的Request.Form其获得价值只提供获取财产,我不能设置它是在单位值测试方法。有没有什么方法可以设置它的值?

回答

0

您是指Request.Form [“Options”]的值?如果是这样,你应该知道这是一个HttpRequest,你需要做的是从http请求中嘲弄它,而不是在你的代码中,因为你不能在这里修改它。

+0

你可以描述任何模拟它的例子吗? – Pawan

+0

我没有一个例子来模拟一个http请求..但我正在谈论它自己的想法。快速搜索在stackoverflow显示这个问题..检查出来,并从那里开始http://stackoverflow.com/questions/4732870/mocking-httprequest-and-httpresponse-for-mvc-application –

3

不要在里面使用Request.Form [“Options”]。您可以在SearchViewModel类中拥有Option属性,并可以使用它。 对于需要在控制器方法中使用会话的场景,您可以使用ModelBinder

0

我们可以通过使用moq来模拟和单元测试Request.Form对象。请参考下面的代码

var controllercontext = new Mock<ControllerContext>(); 
     controllercontext.Setup(frm => frm.HttpContext.Request.Form.Set("Options", "1")); 

Yourcontroller.ControllerContext = controllercontext.Object; 
var response = YourController.Search(new SearchViewModel() {//Your Model Data..}) as ActionResult;