我正在向用 C#/ASP.NET/webforms 编写的大型遗留代码库添加单元测试。我们正在使用最小起订量和 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 上模拟索引器的方法吗?
最佳答案
我想出了这个,它比我做的要简单。
//
// Set a variable in the indexer collction
//
Mock<HttpRequestBase> request = new Mock<HttpRequestBase>();
request.SetupGet(r => r["name"]).Returns("Fred Jones");
关于c# - 我如何模拟 HttpRequest[] 索引器属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10610393/