Я использую nuit с moq для проверки своих контроллеров.
Я использую класс сеанса, который имеет интерфейс, и HttpContext внедряется в конструктор с помощью ninject.
как это
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: тип для имитации должен быть интерфейсом или абстрактным или незапечатанным классом.
Спасибо за помощь.