Moq - 设置HttpResponse

rhu*_*hes 7 c# asp.net-mvc unit-testing moq

我正在尝试使用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);
Run Code Online (Sandbox Code Playgroud)

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

"无法将属性或索引器'System.Web.HttpContextBase.Response'分配给 - 它是只读的.

我试过谷歌搜索并在这个网站上搜索,但我似乎无法找到答案.

Sco*_*ner 5

对于仅获取属性,请使用SetupGet(..),并指定一个.Returns(..)带有要注入的返回值的子句:

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

context.SetupGet(c => c.Response)
       .Returns(response.Object);
Run Code Online (Sandbox Code Playgroud)


rhu*_*hes 4

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

这是正确的代码:

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

context.Setup(c => c.Response).Returns(response.Object);
Run Code Online (Sandbox Code Playgroud)