以下对HttpPost来的表单进行处理的方法进行单元测试。
以下为方法的源代码
[HttpPost]
public ActionResult NewName()
{
ViewBag.Name = Request.Form["Name"];
return View();
}
在提交来的View里有一个@Html.Editor("Name")的元素
下面是单元测试代码,使用moq进行模拟对象
[TestMethod()] public void NewNameTest() {
// 1,准备Form,每个项要一一地进行列举 FormCollection form = new FormCollection(); form["Name"] = "zhong";
// 2,mock Request对象 var mockRequest = new Mock<HttpRequestBase>(); mockRequest.SetupGet(m => m.Form).Returns(form); // 调用Request中Form的getter时,返回我们准备的form
// 3,mock HttpContext对象 var mockContext = new Mock<HttpContextBase>(); mockContext.SetupGet(m => m.Request).Returns(mockRequest.Object); // 调用HttpContext中Request时,返回模拟的Request对象
// 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;
// 6,断言测试 Assert.AreEqual("zhong", actual.ViewBag.Name); }