5

'da Model bağlama testi; MVC'nin iç elemanlarını test etmem gerektiğini bilmekteyim, fakat gerçekten de, bir sisteme, sistemimize akan veriler etrafında bir test yapmamız gerekiyor.ASP.NET MVC 2

Tüm HTTP bağlamıyla dalga geçmeden nasıl objectAodel'e uygun olmadığını (object, dict, collection, object, vb.

Denetleyicimi başlatmam veya eylemi çağırmam gerekmiyor. Yeni nesnemin modelleri değiştirip geçmediğini test etmek istiyorum.

Ben sadece

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

O zaman şöyle bir test yapabilirim: Assert.isTrue (yeni ModelBindingContext (). Validate (objectA)); – detroitpro

cevap

2

Brad Wilson bir excellent post on DataAnnotations


Nasıl It test Do sahiptir yazmak isterdim? DataAnnotations kullanma

senin modelleri için basitleştirilmiş edilecektir denetleyici eylemleri için birim testleri anlamına gelir modeli cilt, kontrolör eylemlerin dışarı ve içine doğrulama hamle bağlıyor. Bunun için testler yazarken

, üç şeye doğrulamak gerekir:

  1. DataAnnotationsModelBinder varsayılan bağlayıcı olarak kayıtlı mı? Sadece bu uygulama için bir kez yaparsınız, tıpkı yazdığınız rota gibi.
  2. Modelim DataAnnotations öznitelikleriyle düzgün bir şekilde dekore edilmiş mi? Modelinize eklediğiniz her bir doğrulama özelliği için testler yazacaksınız.
  3. Model durumu geçersiz olduğunda, eylem yöntemim uygun şekilde tepki veriyor mu? Bunu yalnızca işlem başına bir kez yazmanız gerekir.
+0

Bu, yalnızca modelin doğru niteliklerle dekore edildiğini test edecektir. – detroitpro

0

Çok basit, siz, modelin türü için ModelMetadata çeker ModelValidator alır ve model nesne doğrular bir yöntemi uygulayabilir. "Basitçe" ile

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

, ben bu mutlaka dikkate mümkün olan tüm yapılandırmaları almaz, ancak modelinin geçerliliği konusunda temel onay almak anlamına gelir.