Jul*_*les 5 c# asp.net-mvc nunit moq
我正在使用带有moq的nuit来测试我的控制器.
我使用一个具有接口的会话类,并使用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;
}
Run Code Online (Sandbox Code Playgroud)
我认为为了测试控制器,我首先模拟了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");
}
Run Code Online (Sandbox Code Playgroud)
构建但是nunit在运行测试时返回以下错误
System.NotSupportedException:类型为mock必须是接口或抽象或非密封类.
谢谢你的帮助.
让您的会话在构造函数中采用 HttpContextBase 并将其用作属性的类型。您仍然应该能够在生产代码中将具体的 HttpContext 传递给会话。
public class SessionService : ISession
{
public HttpContextBase Context { get; set; }
public SessionService(HttpContextBase context)
{
this.Context = context;
}
}
Run Code Online (Sandbox Code Playgroud)
然后通过将“mockHttpContext.Object”传递给会话构造函数并模拟 HttpContextBase 来修复单元测试。
[Test]
public void index_returns_view()
{
//arrange
var mockHttpContext = new Mock<HttpContextBase>();
var mockContext = new Mock<ISession>(mockHttpContext.Object);
var c = new HomeController(mockContext.Object);
//act
var v = c.Index() as ViewResult;
//assert
Assert.AreEqual(v.ViewName, "Index", "Index View name incorrect");
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4702 次 |
| 最近记录: |