net mvc example crear asp and c# asp.net-mvc

c# - example - security asp net mvc



¿Cómo puedo probar ModelState? (4)

¿Cómo puedo probar Controller.ViewData.ModelState ? Preferiría hacerlo sin ningún marco simulado.


No es necesario utilizar 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.");


//[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);


Además de las excelentes respuestas anteriores, consulte este fantástico uso del método TryValidateModel protegido dentro de la clase Controller.

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

Todo el mérito recae en John Reilly y Marc Talary por esta solución.


Para probar la API web, use el método Validar en el controlador:

var controller = new MyController(); controller.Configuration = new HttpConfiguration(); var model = new MyModel(); controller.Validate(model); var result = controller.MyMethod(model);