ASP.NET MVC單元測試Controller時添加內容相關的方式

來源:互聯網
上載者:User

在ASP.NET MVC中測試Controller時,常常需要在Controller中訪問上下文,比方說查詢字串或者form中的內容,而我們測試的時候一般不是在web運行環境下的,所以我們需要做些工作去類比上下文。

Controller中代碼如下

 

public ActionResult Index()
{
ViewData["Message"] = Request.QueryString["lfm"];

return View();
}

 

 

測試寫法如下:

 

代碼

[TestMethod]
public void Index()
{
HomeController controller = new HomeController();

var httpContext = new Mock<HttpContextBase>();
var request=new Mock<HttpRequestBase>();
NameValueCollection queryString = new NameValueCollection();
queryString.Add("lfm", "lfm");
request.Setup(r => r.QueryString).Returns(queryString);
httpContext.Setup(ht => ht.Request).Returns(request.Object);

ControllerContext controllerContext = new ControllerContext();
controllerContext.HttpContext = httpContext.Object;
controller.ControllerContext = controllerContext;

ViewResult result = controller.Index() as ViewResult;

ViewDataDictionary viewData = result.ViewData;
Assert.AreEqual("lfm", viewData["Message"]);
}

 

這裡用到了Mock可以參考:

MoQ(基於.net3.5,c#3.0的mock架構)簡單介紹

如果是form稍作修改即可:

 

 public ActionResult About()
{
ViewData["Message"] = Request.Form["lfm"];
return View();
}

 

 

測試代碼:

 

代碼

[TestMethod]
public void About()
{
// Arrange
HomeController controller = new HomeController();
var httpContext = new Mock<HttpContextBase>();
var request = new Mock<HttpRequestBase>();
NameValueCollection queryString = new NameValueCollection();
queryString.Add("lfm", "lfm");
request.Setup(r => r.Form).Returns(queryString);
httpContext.Setup(ht => ht.Request).Returns(request.Object);

ControllerContext controllerContext = new ControllerContext();
controllerContext.HttpContext = httpContext.Object;
controller.ControllerContext = controllerContext;
// Act
ViewResult result = controller.About() as ViewResult;

// Assert
ViewDataDictionary viewData = result.ViewData;
Assert.AreEqual("lfm", viewData["Message"]);
}

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.