相关疑难解决方法(0)

为什么我想要模拟的属性需要是虚拟的?

我正在进行一些单元测试,并使用Moq模拟一些属性.

现在,这是一个Controller测试(ASP.NET MVC 3).我的控制器派生自一个名为AbstractController抽象控制器.

该控制器依赖于Http Context(为了做主题,基于HTTP HOST头的特定于域的逻辑等).

这是通过名为WebSiteSettings的属性完成的:

public abstract class AbstractController : Controller
{
   public WebSiteSettings WebSiteSettings { get; private set; }

   // other code
}
Run Code Online (Sandbox Code Playgroud)

注意私人集 - ctor设置它.所以,我把它改成使用了一个界面,这就是我所嘲笑的:

public IWebSiteSettings WebSiteSettings { get; private set; }
Run Code Online (Sandbox Code Playgroud)

然后我创建了一个"FakeWebSiteSettings",它嘲笑Http Context以便它读取HTTP头.

问题是,当我运行测试时,我得到一个NotSupportedException:

非虚拟(在VB中可覆盖)成员的设置无效:x => x.WebSiteSettings

这是相关的模拟代码:

var mockWebSiteSettings = new Mock<FakeWebSiteSettings>();
var mockController = new Mock<MyController>(SomeRepository);
mockController.Setup(x => x.WebSiteSettings).Returns(mockWebSiteSettings.Object);

_controller = mockController.Object;

var httpContextBase = MvcMockHelpers.FakeHttpContext();
httpContextBase.Setup(x => …
Run Code Online (Sandbox Code Playgroud)

c# asp.net-mvc unit-testing controller moq

39
推荐指数
1
解决办法
7万
查看次数

标签 统计

asp.net-mvc ×1

c# ×1

controller ×1

moq ×1

unit-testing ×1