Używam nuit z moq do testowania kontrolerów.przekazywanie wyśmiewanego parametru do wyśmiewanego interfejsu
Używam klasy sesji, która ma interfejs i HttpContext jest wstrzykiwany do konstruktora przy użyciu ninject. jak ten
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;
}
myślę, że w celu przetestowania kontrolera mam pierwszy mock HttpContext a następnie przekazać ten obiekt do tej konstruktor z wyśmiewali ISession. mam to tak daleko
[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");
}
która buduje ale nunit zwraca następujący błąd, gdy badanie przeprowadzane jest
System.NotSupportedException: Rodzaj aby Mock musi być interfejs lub abstrakcyjne lub niezgrzewane klasę.
Dzięki za pomoc.
spojrzenie 'HttpContextBase' –
jeśli naprawdę trzeba kpić każdą zamkniętą klasę z niestandardowego zachowania, spojrzeć na projekt molami Microsoftu. –