5

Zuerst; Ich weiß, dass ich die Interna von MVC nicht testen sollte, aber ich brauche WIRKLICH eine Suite, um die Daten zu testen, die in unser System fließen.Testen der Modellbindung in ASP.NET MVC 2

Wie kann ich, hoffe ich, ohne den gesamten HTTP-Kontext zu verspotten, testen, ob objectA (Formularsammlung, dict, Sammlung, Objekt usw.) objectAModel entspricht oder nicht?

Ich möchte meinen Controller nicht instanziieren oder die Aktion aufrufen müssen. Ich möchte einfach testen, ob mein neues Objekt den Modellstatus ungültig macht.

Ich wünschte, ich einfach

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

Ich wäre dann in der Lage zu testen wie: Assert.isTrue (neue ModelBindingContext (). Validate (objectA)); – detroitpro

Antwort

2

Brad Wilson eine excellent post on DataAnnotations


Wie schreiben konnte ich das testen hat?

die DataAnnotations-Attributen für Modelle bewegt die Validierungs aus den Controller-Aktionen und in dem Modell Bindemittel, das für die Controller-Aktionen Ihre Komponententests bedeutet werden vereinfacht.

Wenn Sie Tests für diese schreiben, Sie brauchen drei Dinge zu überprüfen:

  1. Ist der DataAnnotationsModelBinder registriert als Standardbinder? Sie werden dies nur einmal für die gesamte Anwendung tun, ähnlich wie die Route Tests, die Sie schreiben würden.
  2. Ist mein Modell ordnungsgemäß mit DataAnnotations-Attributen versehen? Sie werden Tests für jedes Validierungsattribut schreiben, das Sie zu Ihrem Modell hinzufügen.
  3. Reagiert meine Aktionsmethode ordnungsgemäß, wenn der Modellstatus ungültig ist? Sie müssen dies nur einmal pro Aktionsmethode schreiben.
+0

Dies prüft nur, ob das Modell mit den korrekten Attributen versehen ist. – detroitpro

0

Ganz einfach, können Sie eine Methode implementieren, die die ModelMetadata für Ihr Modell des Typs zieht, bekommt die ModelValidator und validiert das Modellobjekt.

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

Mit „einfach“, meine ich dies braucht nicht unbedingt alle möglichen Konfigurationen in der Prüfung, aber Sie können eine grundlegende Überprüfung Ihres Modells Gültigkeit erhalten.

Verwandte Themen