我怎么能模拟HttpRequest []索引器属性

时间:2012-05-15 23:56:42

标签: c# moq httprequest xunit

我正在将单元测试添加到用C#/ ASP.NET / webforms编写的大型遗留代码库中。我们正在使用MOQ和XUnit。我们已经能够使用如下语法模拟查询字符串值:

Mock<HttpRequestBase> request = new Mock<HttpRequestBase>();
NameValueCollection queryStringParams = new NameValueCollection();
queryStringParams.Add("name", "Fred Jones");
request.Setup(x => x.QueryString).Returns(queryStringParams);

这使得此代码可以正常工作:

string name = _mockRequest.QueryString["name"];

问题在于遍布整个代码库的许多调用都以以下形式获取查询字符串变量或表单变量:

string name = HttpContext.Current.Request["name"];

索引器显然查看了所有各种集合:查询字符串,表单值,cookie和服务器变量。我不想通过重构生产代码来使用这些集合中的单个集合来引入许多潜在的副作用。

有没有人知道在HttpRequest上模拟该索引器的方法?

1 个答案:

答案 0 :(得分:8)

我想出了这个,它比我做的简单。

//
// Set a variable in the indexer collction
//
Mock<HttpRequestBase> request = new Mock<HttpRequestBase>();
request.SetupGet(r => r["name"]).Returns("Fred Jones");