4

我正在向用 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 上模拟该索引器的方法?

4

1 回答 1

8

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

//
// Set a variable in the indexer collction
//
Mock<HttpRequestBase> request = new Mock<HttpRequestBase>();
request.SetupGet(r => r["name"]).Returns("Fred Jones");
于 2013-01-17T02:57:39.900 回答