我有以下代码,在运行时会失败...

var mock = new Mock<ControllerContext>();
mock.SetupGet(x => x.HttpContext.Request
    .ServerVariables["HTTP_HOST"]).Returns(domain);



我的 Controller 中有一些代码,该代码需要检查用户请求/去往的域。

我不确定该如何模拟?有任何想法吗?

PS。我在上面的示例中使用的是Moq framewoke ..所以我不确定这是否是一个问题,等等?

最佳答案

您不能在NameValueCollection上模拟索引器,因为它不是虚拟的。我会做的是模拟ServerVariables属性,因为它是虚拟的。您可以填写自己的NameValueCollection。见下文

这是我会做的:

 var context = new Mock<ControllerContext>();
 NameValueCollection variables = new NameValueCollection();
 variables.Add("HTTP_HOST", "www.google.com");
 context.Setup(c => c.HttpContext.Request.ServerVariables).Returns(variables);
 //This next line is just an example of executing the method
 var domain = context.Object.HttpContext.Request.ServerVariables["HTTP_HOST"];
 Assert.AreEqual("www.google.com", domain);

关于.net - 如何模拟ASP.NET ServerVariables ["HTTP_HOST"]值?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2315272/

10-11 02:00