Estoy intentando crear pruebas de integración para asegurarme de que mis vistas no tengan ningún error en el tiempo de ejecución. Por lo tanto, necesito crear una prueba que compruebe si el ViewResult.ExecuteResult()
funciona correctamente, pero parece que me he topado con un problema.¿Cómo puedo simular correctamente mi controladorcontexto para probar ViewResult.ExecuteResult()?
me encontré this site que me dio un punto de partida, y tengo el siguiente código:
[TestMethod]
public void RegisterResultExecutes()
{
//arrange
RequestContext requestContext = new RequestContext(new MockHttpContext(), new RouteData());
AccountController controller = new AccountController
{
FormsService = new MockFormsAuthenticationService(),
MembershipService = new MockMembershipService(),
Url = new UrlHelper(requestContext)
};
var result = controller.Register();
var sb = new StringBuilder();
Mock<HttpResponseBase> response = new Mock<HttpResponseBase>();
response.Setup(x => x.Write(It.IsAny<string>())).Callback<string>(y =>
{
sb.Append(y);
});
Mock<ControllerContext> controllerContext = new Mock<ControllerContext>();
controllerContext.Setup(x => x.HttpContext.Response).Returns(response.Object);
//act
result.ExecuteResult(controllerContext.Object);
}
El problema es que cuando result.ExecuteResult()
se llama consigo la siguiente excepción
System.NullReferenceException: Object reference not set to an instance of an object.
System.Web.Mvc.ViewResultBase.ExecuteResult(ControllerContext context)
MyApp.Tests.Controllers.AccountControllerTest.RegisterResultExecutes() in C:\Users\KallDrexx\Documents\Projects\MyApp\MyApp.Tests\Controllers\AccountControllerTests.cs: line 297
Por desgracia, ese rastro de pila no es muy útil ya que no estoy seguro de a qué intenta acceder que sea nulo. ¿Alguien tiene alguna sugerencia sobre cómo puedo crear una prueba para ExecuteResult()
?
Aha, que la reflexión da una gran cantidad de información. Fue 'RouteData' lo que estaba causando el problema, pero ahora parece que necesito encontrar una forma para' context.RouteData.GetRequiredString ("action"); 'para devolver algo útil, ya que es donde estoy estancado ahora – KallDrexx
Bien después de configurar 'RouteData' correctamente, parece que estoy al límite de lo que puedo hacer, y esto parece ser imposible. La llamada a 'FindView()' obtiene una 'NullReferenceException' 15 (literalmente) capas en el rastro de pila en' System.Web.Compilation.BuildManager.GetCacheKeyFromVirtualPath() '. Oh, bueno :( – KallDrexx
Temía que te toparas con un tapón de show como ese. ¿Hay algo específico que estés tratando de probar en tus vistas? Si quieres asegurarte de que tus expresiones lambda estén bien (si estás usando alguna) puede [compilar sus puntos de vista] (http://stackoverflow.com/questions/383192/compile-views-in-asp-net-mvc). Si desea probar javascript, entonces buscaría en Google pruebas de la unidad de JavaScript como Sé que hay marcos para eso, pero no los he usado. ¿O está intentando probar algo más junto a todos juntos? –