5

Primo; So che non avrei bisogno di testare i componenti interni di MVC ma ho VERAMENTE bisogno di una suite per testare i dati che fluiscono nel nostro sistema.Test del collegamento del modello in ASP.NET MVC 2

Come posso, spero senza aver preso in giro tutto il contesto HTTP, verificare che l'oggetto A (raccolta moduli, dict, raccolta, oggetto, ecc.) Non sia conforme a objectAModel?

Mi piacerebbe non dover istanziare il mio controller o chiamare l'azione. Voglio semplicemente verificare se il mio nuovo oggetto invalida lo stato del modello.

Vorrei poter scrivere semplicemente

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

Sarei quindi in grado di testare come: Assert.isTrue (nuovo ModelBindingContext (). Validate (objectA)); – detroitpro

risposta

2

Brad Wilson ha un excellent post on DataAnnotations


Come posso provarlo?

Usando i DataAnnotations attributi per le modelli sposta la convalida fuori delle azioni di controllo e in modello legante, il che significa tuoi test di unità per le azioni di controllo saranno semplificate.

Quando stai scrivendo i test per questo, è necessario verificare tre cose:

  1. Intende la DataAnnotationsModelBinder registrati come legante di default? Lo farai solo una volta per l'intera applicazione, proprio come i test di rotta che avresti scritto.
  2. Il mio modello è decorato correttamente con gli attributi DataAnnotations? Finirai per scrivere i test per ogni attributo di convalida che aggiungi al tuo modello.
  3. Il mio metodo di azione reagisce correttamente quando lo stato del modello non è valido? Avrai solo bisogno di scrivere questo una volta per metodo di azione.
+0

Verificherà solo che il modello è decorato con gli attributi corretti. – detroitpro

0

Molto semplicemente, è possibile implementare un metodo che tira il ModelMetadata per il tipo di modello, ottiene il ModelValidator, e convalida l'oggetto del modello.

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(); 
} 

Con il termine "semplicemente", voglio dire, questo non significa necessariamente prendere tutte le possibili configurazioni per considerazione, ma è possibile ottenere un controllo di base sulla validità del modello.