C# 如何在模拟的HttpContextBase中设置返回会话和请求参数值?

C# 如何在模拟的HttpContextBase中设置返回会话和请求参数值?,c#,asp.net,unit-testing,moq,C#,Asp.net,Unit Testing,Moq,我正在尝试在.ashx中测试一种方法。(是的,是一个ASP.NET Web表单站点。) 说, 非虚拟(在VB中可重写)成员上的设置无效:x=>x.Params[“PrintId”] 但是,用会话和请求参数值模拟HttpContext的正确方法是什么呢?正如消息所说,访问器不是虚拟的,因此无法为测试覆盖/模拟它 但是,NameValueCollection.Params属性是virtual,这意味着您可以将其替换为包含该键的实际NameValueCollection var parameters

我正在尝试在.ashx中测试一种方法。(是的,是一个ASP.NET Web表单站点。)

说,

非虚拟(在VB中可重写)成员上的设置无效:x=>x.Params[“PrintId”]


但是,用会话和请求参数值模拟
HttpContext
的正确方法是什么呢?

正如消息所说,访问器不是虚拟的,因此无法为测试覆盖/模拟它

但是,
NameValueCollection.Params
属性是
virtual
,这意味着您可以将其替换为包含该键的实际
NameValueCollection

var parameters = new NameValueCollection();
parameters.Add("PrintId", "1981");
moqRequest.Setup(x => x.Params).Returns(parameters);

正如消息所说,该访问器不是虚拟的,因此不能为测试覆盖/模拟它。然而,Params属性是虚拟的,这意味着您可以用实际的NameValueCollection替换它,该集合包含keyI,如果您展示上下文如何在测试中的方法中使用,则会更容易提供帮助。这样我们就知道什么是需要嘲笑的。因为您可能只需要一个上下文模拟并在其上设置所有内容。
moqRequest.Setup(x => x.Params["PrintId"]).Returns("1981");
var parameters = new NameValueCollection();
parameters.Add("PrintId", "1981");
moqRequest.Setup(x => x.Params).Returns(parameters);