asp.net mvc3对HttPost来的表单使用moq进行单元测试
作者:网络转载 发布时间:[ 2013/7/29 13:59:53 ] 推荐标签:
以下对HttpPost来的表单进行处理的方法进行单元测试。
以下为方法的源代码
<SPAN style="WHITE-SPACE: pre"> </SPAN>[HttpPost]
public ActionResult NewName()
{
ViewBag.Name = Request.Form["Name"];
return View();
}
在提交来的View里有一个@Html.Editor("Name")的元素
下面是单元测试代码,使用moq进行模拟对象
<PRE class=html name="code"><SPAN style="WHITE-SPACE: pre"> </SPAN>[TestMethod()]
public void NewNameTest()
{</PRE><PRE class=html name="code"><SPAN style="WHITE-SPACE: pre"> </SPAN> // 1,准备Form,每个项要一一地进行列举
FormCollection form = new FormCollection();
form["Name"] = "zhong";
</PRE><PRE class=html name="code"><SPAN style="WHITE-SPACE: pre"> </SPAN> // 2,mock Request对象
var mockRequest = new Mock<HttpRequestBase>();
mockRequest.SetupGet(m => m.Form).Returns(form);<SPAN style="WHITE-SPACE: pre"> </SPAN>// 调用Request中Form的getter时,返回我们准备的form
</PRE><PRE class=html name="code"><SPAN style="WHITE-SPACE: pre"> </SPAN> // 3,mock HttpContext对象
var mockContext = new Mock<HttpContextBase>();
mockContext.SetupGet(m => m.Request).Returns(mockRequest.Object); // 调用HttpContext中Request时,返回模拟的Request对象
</PRE><PRE class=html name="code"><SPAN style="WHITE-SPACE: pre"> </SPAN> // 4,实例化Controller对象
HomeController target = new HomeController();
target.ControllerContext = new ControllerContext(mockContext.Object, new RouteData(), target); // 将模拟HttpContext对象传给Controller
// 5,执行要测试的方法
ViewResult actual;
actual = target.NewName() as ViewResult;
</PRE><PRE class=html name="code"><SPAN style="WHITE-SPACE: pre"> </SPAN> // 6,断言测试
Assert.AreEqual("zhong", actual.ViewBag.Name);
}</PRE><BR>
<BR>
<P></P>
<PRE></PRE>
<BR>
<P></P>

sales@spasvo.com