【发布时间】:2011-12-01 14:54:51
【问题描述】:
我正在使用 nuit 和 moq 来测试我的控制器。
我使用一个具有接口的会话类,并使用 ninject 将 HttpContext 注入到构造函数中。 像这样
public class SessionService : ISession
{
public HttpContext Context { get; set; }
public SessionService(HttpContext context)
{
this.Context = context;
}
}
public interface ISession
{
HttpContext Context { get; set; }
}
public HomeController(ISession session)
{
_session = session;
}
我认为为了测试控制器,我首先模拟了 HttpContext,然后将该对象传递给模拟的 ISession 的构造函数。 到目前为止我有这个
[Test]
public void index_returns_view()
{
//arrange
var mockHttpContext = new Mock<HttpContext>();
var mockContext = new Mock<ISession>(mockHttpContext);
var c = new HomeController(mockContext.Object);
//act
var v = c.Index() as ViewResult;
//assert
Assert.AreEqual(v.ViewName, "Index", "Index View name incorrect");
}
构建但 nunit 在运行测试时返回以下错误
System.NotSupportedException : 要模拟的类型必须是接口或抽象或非密封类。
感谢大家的帮助。
【问题讨论】:
-
如果您真的需要使用您的自定义行为模拟任何密封类,请查看 microsoft 的 moles 项目。
标签: c# asp.net-mvc nunit moq