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

本文介绍了如何在ASP.NET MVC中模拟HTTP上下文以测试Controller的行为。通过使用MoQ框架,文章详细展示了如何设置模拟请求及验证控制器是否正确处理了查询字符串和表单数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在ASP.NET MVC中测试Controller时,常常需要在Controller中访问上下文,比方说查询字符串或者form中的内容,而我们测试的时候一般不是在web运行环境下的,所以我们需要做些工作去模拟上下文。

Controller中代码如下

 


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

return View();
}

 

 

测试写法如下:

 

ContractedBlock.gif ExpandedBlockStart.gif 代码

   
[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();
}

 

 

测试代码:

 

ContractedBlock.gif ExpandedBlockStart.gif 代码

   
[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 " ]);
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值