5

Primero; Sé que no debería necesitar probar las funciones internas de MVC, pero REALMENTE necesito un conjunto de pruebas sobre los datos que fluyen en nuestro sistema.Prueba del enlace del modelo en ASP.NET MVC 2

¿Cómo puedo, espero sin burlar todo el contexto HTTP, probar que objectA (colección de formularios, dict, colección, objeto, etc.) se ajusta o no a objectAModel?

Me gustaría no tener que crear una instancia de mi controlador o llamar a la acción. Simplemente quiero probar si mi nuevo objeto invalida el modelo de estado.

Me gustaría poder escribir simplemente

var modelState = new ModelBindingContext<objectAModel>().validate(objectA); 
+0

Entonces podría probar como: Assert.isTrue (new ModelBindingContext (). Validate (objectA)); – detroitpro

Respuesta

2

Brad Wilson tiene una excellent post on DataAnnotations


¿Cómo probarlo?

Utilizando los DataAnnotations atributos para sus modelos mueve la validación de las acciones del controlador y en el modelo de aglutinante, que significa que su pruebas de unidad para sus acciones del controlador serán simplificados.

Cuando se está escribiendo pruebas para esto, tiene que comprobar tres cosas:

  1. ¿Está el DataAnnotationsModelBinder registrados como aglutinante defecto? Solo lo hará una vez para toda la aplicación, al igual que las pruebas de la ruta que escribiría.
  2. ¿Mi modelo está decorado correctamente con los atributos de DataAnnotations? Terminará escribiendo pruebas para cada atributo de validación que agregue a su modelo.
  3. ¿Mi método de acción reacciona adecuadamente cuando el estado del modelo no es válido? Solo necesitará escribir este método una vez por acción.
+0

Esto solo probará que el modelo está decorado con los atributos correctos. – detroitpro

0

Muy simple, se puede implementar un método que tira de la ModelMetadata para el tipo de modelo, obtiene el ModelValidator, y valida el modelo de objetos.

public bool IsModelValid<T>(T model) where T : class 
{ 
    var metaData = ModelMetadataProviders.Current.GetMetadataForType(() => model, typeof(T)); 
    var validator = ModelValidator.GetModelValidator(metaData, new ControllerContext()); 
    var validationResults = validator.Validate(model); 
    return 0 == validationResults.Count(); 
} 

Por "simplemente", me refiero a esto no significa necesariamente que tome todas las configuraciones posibles en consideración, pero se puede obtener una comprobación básica sobre la validez de su modelo.

Cuestiones relacionadas