8

我正在尝试使用 MVC 4、Moq 4 和 C# 4.5 模拟 ConrollerContext 对象的 HttpResponse

我的代码在这里:

var context = new Mock<HttpContextBase>();
var response = new Mock<HttpResponseBase>();

context.SetupProperty(c => c.Response = response);

我试过使用Setup().Returns()SetupGet()但我不断收到以下错误:

“无法将属性或索引器‘System.Web.HttpContextBase.Response’分配给——它是只读的。

我试过用谷歌搜索这个并在这个网站上搜索,但我似乎找不到答案。

4

2 回答 2

5

对于 get-only 属性,使用SetupGet(..)并指定一个.Returns(..)带有返回值的子句以注入:

var context = new Mock<HttpContextBase>();
var response = new Mock<HttpResponseBase>();

context.SetupGet(c => c.Response)
       .Returns(response.Object);
于 2013-01-10T01:12:50.613 回答
4

看来我没有将正确的对象传递给Returns()方法。我应该通过模拟的Object财产。

这是正确的代码:

var context = new Mock<HttpContextBase>();
var response = new Mock<HttpResponseBase>();

context.Setup(c => c.Response).Returns(response.Object);
于 2012-09-01T07:17:39.683 回答