asp.net mvc3 对HttPost来的表单使用moq进行单元测试

发表于:2013-7-29 11:01

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:北极孤雁    来源:51Testing软件测试网采编

  以下对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>

《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号