¿Cómo puedo probar Controller.ViewData.ModelState
? Preferiría hacerlo sin ningún marco simulado.¿Cómo puedo probar ModelState?
Respuesta
No tiene que usar un simulacro si está utilizando el patrón de repositorio para sus datos, por supuesto.
Algunos ejemplos: http://www.singingeels.com/Articles/Test_Driven_Development_with_ASPNET_MVC.aspx
// Test for required "FirstName".
controller.ViewData.ModelState.Clear();
newCustomer = new Customer
{
FirstName = "",
LastName = "Smith",
Zip = "34275",
};
controller.Create(newCustomer);
// Make sure that our validation found the error!
Assert.IsTrue(controller.ViewData.ModelState.Count == 1,
"FirstName must be required.");
Un modificador virtual en Errores sería agradable, por desgracia hay un impuesto de arreglos, que me parece un poco pesado. –
En mi humilde opinión, la mejor solución es usar un transportador de mvc. De esta manera, obtiene un comportamiento más realista de su controlador, debe entregar la validación del modelo a su destino: validación de atributos. La publicación siguiente describe esto (http://stackoverflow.com/a/5580363/572612). –
//[Required]
//public string Name { get; set; }
//[Required]
//public string Description { get; set; }
ProductModelEdit model = new ProductModelEdit() ;
//Init ModelState
var modelBinder = new ModelBindingContext()
{
ModelMetadata = ModelMetadataProviders.Current.GetMetadataForType(
() => model, model.GetType()),
ValueProvider=new NameValueCollectionValueProvider(
new NameValueCollection(), CultureInfo.InvariantCulture)
};
var binder=new DefaultModelBinder().BindModel(
new ControllerContext(),modelBinder);
ProductController.ModelState.Clear();
ProductController.ModelState.Merge(modelBinder.ModelState);
ViewResult result = (ViewResult)ProductController.CreateProduct(null,model);
Assert.IsTrue(result.ViewData.ModelState["Name"].Errors.Count > 0);
Assert.True(result.ViewData.ModelState["Description"].Errors.Count > 0);
Assert.True(!result.ViewData.ModelState.IsValid);
Me gusta mucho este método. Como dices, es mucho mejor probar un modelo correctamente que haya sido decorado con atributos de validación. – stevethethread
¡Esto es asombroso! – Ian1971
Muy útil. Creo que generalmente estoy de acuerdo con las personas que dicen que no deberían probar las propiedades de su modelo, ya que eso es parte del marco, pero a veces es fundamental confirmar para el futuro que su controlador está detectando errores críticos. –
Agregando las grandes respuestas anteriores, echa un vistazo a este fantástico uso del método TryValidateModel protegida dentro de la clase controlador.
Simplemente cree una clase de prueba que hereda del controlador y pase su modelo al método TryValidateModel. Aquí está el enlace: http://blog.icanmakethiswork.io/2013/03/unit-testing-modelstate.html
El crédito total va para John Reilly y Marc Talary por esta solución.
Por favor incluya la solución aquí en lugar de vincular fuera a una entrada de blog – csharpsql
Su enlace es muerto. –
Para Web API prueba, utilice el método Validate en el controlador:
var controller = new MyController();
controller.Configuration = new HttpConfiguration();
var model = new MyModel();
controller.Validate(model);
var result = controller.MyMethod(model);
- 1. ¿Cómo puedo mantener ModelState con RedirectToAction?
- 2. ¿Cómo actualizar ModelState?
- 3. ¿Cómo agrego error ModelState a una lista
- 4. ¿Cómo accedo a ModelState desde un ActionFilter?
- 5. MVC3 Eliminar errores de ModelState
- 6. ASP.NET MVC: ModelState vs. ModelStateDictionary
- 7. ¿Cómo puedo probar la unidad GC?
- 8. ¿Cómo puedo probar Xcode Project en iPhone?
- 9. ¿Cómo puedo probar los servlets con JUnit?
- 10. ¿Cómo puedo probar la membresía de Asp.net?
- 11. ¿Cómo puedo probar mi aplicación Dock
- 12. WP 7.5 - ¿Cómo puedo probar el tombstoning?
- 13. ¿Cómo puedo probar métodos privados con DUnit?
- 14. ¿Cómo puedo probar la unidad? ¿Es descartable?
- 15. Postfix su instalado pero ¿cómo puedo probar
- 16. ¿Cómo puedo probar programáticamente las cookies?
- 17. ¿Cómo puedo probar CanCan en la consola?
- 18. ¿Cómo puedo probar el cero negativo?
- 19. ¿Cómo puedo probar la compatibilidad de OpenCL?
- 20. ¿Cómo puedo probar mis aplicaciones de iOS
- 21. ¿Cómo mantengo los errores de ModelState cuando uso RedirectToAction?
- 22. ¿Puedo probar/detectar una advertencia?
- 23. Si no existe una clave en el ModelState, ¿cómo puedo agregarla? aspnetmvc1
- 24. Actualización de ModelState con el objeto modelo
- 25. ASP.Net MVC ModelState/Html.TextBox postback issue
- 26. Invocación manual de la validación ModelState
- 27. ¿Cómo llamar a ValidationAttributes manualmente? (DataAnnotations and ModelState)
- 28. Ajax.BeginForm OnFailure invocado cuando ModelState es InValid
- 29. Devolver una lista de claves con errores de ModelState
- 30. C# ¿Cómo puedo probar que un archivo es un jpeg?
ser más específico. ¿Para qué estás tratando de probarlo? – skb