我正在进行一些单元测试,并使用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)