2009-04-06 21 views
7

Tengo un método de controlador que devuelve RedirectToActionResult (¡éxito!) O ViewResult (error con los mensajes de error).¿Es posible probar algunos resultados AddModelError en ASP.NET MVC?

Si la lógica comercial falla, agrego los mensajes de error a la propiedad AddModelError.

¿Hay alguna manera de que pueda probar esto en mis pruebas de unidad de MS? También tengo Moq, si eso ayuda también. (No creo que se requiera Moq para este escenario) ... No estoy usando nada del objeto Request.

Respuesta

7

Sí, lo descubrí.

// Arrange. 
// .. whatever .. 

// Act. 
var viewResult = controller.Create(new Post()) as ViewResult; 

// Assert. 
Assert.IsNotNull(viewResult); 
Assert.IsNotNull(viewResult.ViewData.ModelState["subject"]); 
Assert.IsNotNull(viewResult.ViewData.ModelState["subject"].Errors); 
Assert.IsTrue(viewResult.ViewData.ModelState["subject"].Errors.Count == 1); 
6

Puede (también) probar el dispositivo de forma directa (sin la prueba de la vista) de la siguiente manera:

// Arrange. 
// .. 

// Act. 
controller.Create(new Post()); // missing UserName will invalidate Model with "Please specify your name" message 

// Assert 
Assert.IsTrue(! controller.ModelState.IsValid); 
Assert.IsTrue( controller.ModelState["UserName"].Errors.Any(modelError => modelError.ErrorMessage == "Please specify your name")); 
Cuestiones relacionadas