ASP.NET MVC单元测试Controller时添加上下文的方式

在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"]);
}
复制代码

 

posted @   你听海是不是在笑  阅读(3827)  评论(2编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述
点击右上角即可分享
微信分享提示