5

먼저; 나는 MVC의 내부를 테스트 할 필요가 없다는 것을 알고 있지만, 우리 시스템에 흐르는 데이터에 대한 테스트가 필요하다.ASP.NET MVC 2에서 모델 바인딩 테스트

어떻게 HTTP 컨텍스트를 모두 조롱하지 않고도 해당 objectA (양식 컬렉션, dict, 컬렉션, 개체 등)가 objectAModel을 준수하는지 테스트 할 수 있습니까?

컨트롤러를 인스턴스화하거나 조치를 호출하지 않아도됩니다. 내 새로운 객체가 모델 상태를 무효로하는지 단순히 테스트하고 싶습니다.

나는 단순히

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

다음과 같이 테스트 할 수 있습니다. Assert.isTrue (new ModelBindingContext (). validate (objectA))); – detroitpro

답변

2

브래드 윌슨은 excellent post on DataAnnotations


어떻게 테스트 함을 가지고 쓸 수 소원? DataAnnotations를 사용

은 모델 간소화됩니다 컨트롤러 액션 대한 단위 테스트를 의미 모델 바인더, 컨트롤러 액션에서 벗어나 으로 검증 이동 속성. 이에 대한 테스트를 작성 할 때

, 당신은 세 가지를 확인해야합니다

  1. 가 DataAnnotationsModelBinder 기본 바인더 등록되어 있습니까? 전체 응용 프로그램에 대해이 작업을 한 번만 수행합니다. 테스트와 비슷합니다.
  2. 내 모델이 DataAnnotations 속성으로 적절히 장식되어 있습니까? 모델에 을 추가 한 각 유효성 검사 속성에 대한 테스트를 작성하게됩니다.
  3. 모델 상태가 유효하지 않을 때 제 조치 방법이 적절하게 반응합니까? 작업 방법마다 한 번만 작성하면됩니다.
+0

이것은 모델이 올바른 속성으로 장식되어 있는지만을 테스트합니다. – detroitpro

0

은 아주 간단하게, 당신은, 모델의 유형에 대한 ModelMetadata를 당기는 ModelValidator를 가져오고 모델 객체의 유효성을 검사하는 방법을 구현할 수 있습니다. "단순히"으로

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

, 나는이 반드시 고려하여 모든 가능한 구성을 고려하지 않습니다,하지만 당신은 모델의 유효성에 대한 기본적인 검사를 얻을 수 있습니다 의미한다.