我正在使用 moq 对 ASP.NET Http 处理程序进行单元测试。
在这里,我尝试使用 HttpRequestBase 类的 Request 属性访问当前请求的 HttpRequest 实例。正如我们所知,简化语法可用于访问 QueryString、Form、Cookie 或 ServerVariables 集合中的数据,即 Request["key"]。(在处理程序的 ProcessRequest 方法中使用)
但我无法获得查询字符串值。代码如下:
测试班
[TestMethod()]
private static void MockProcessRequestExecution(AbcHandler abcHandler)
{
NameValueCollection queryString = new NameValueCollection();
queryString.Add("employeeid", "22");
Mock<HttpContextBase> testHttpContext = new Mock<HttpContextBase>();
Mock<HttpResponseBase> testHttpResponse = new Mock<HttpResponseBase>();
Mock<HttpRequestBase> testHttpRequest = new Mock<HttpRequestBase>();
testHttpContext.SetupGet(context => context.Response).Returns(testHttpResponse.Object);
testHttpContext.SetupGet(context => context.Request).Returns(testHttpRequest.Object);
testHttpRequest.SetupGet(request => request.QueryString).Returns(queryString);
testHttpContext.SetupGet(context => context.Request.QueryString).Returns(queryString);
testHttpResponse.SetupSet(response => response.ContentType = "text/plain");
abcHandler.ProcessRequest(testHttpContext.Object);
testHttpResponse.VerifyAll();
}
在处理程序方法代码中提取请求变量如下:
ProcessRequest(HttpContextBase context)
{
var employee = context.Request["employeeid"];
}
employeeid 的值是 null。
如果将其写为 context.Request.QueryString["employeeid"],我将获得该值,但无法更改在 ProcessRequest 方法中编写的代码。那么问题来了,如何获取 Request key: "employeeid" 的值