c# - 我如何模拟 HttpRequest[] 索引器属性

标签 c# moq httprequest xunit

我正在向用 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/

相关文章:

c# - 解码jwt错误: Unable to decode the payload as Base64Url encoded string

c# - 在 linq 中选择总小时数

c# - 从 git 中提取项目后,Unity 无法识别某些 .cs 文件

c# - 如何在 C# 中为 ActiveMQ 队列创建队列浏览器(预览而不是使用)?

c# - SetupSet 'forgets'方法设置的使用

python - 如何使用 Python Requests 库或 PyCurl 使用以前的 cookie 进行 POST?

moq - 模拟 ChildProperty 不能让它工作?

c# - 模拟存储库和测试参数化服务方法

http - HTTP代理服务器会修改请求包吗?

jquery - 上传:IO 错误