我正在使用nuit和moq来测试我的控制器。
我使用一个带有接口的session类,并使用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:要模拟的类型必须是接口、抽象类或非密封类。
感谢所有的帮助。