2010-12-09 3 views
4

여기 컨트롤러 액션의 일부 때 검증되지 않습니다 다음 if 문 심지어 호출되기 전에모델은 자동으로 단위 테스트

[HttpPost] 
public ActionResult NewComplaint(Complaint complaint) 
{ 
    if(!ModelState.IsValid) 
    { 
     // some code 
    } 
    // some more code... 
} 

응용 프로그램을 실행 모델은 자동으로 확인됩니다. 그러나이 코드를 단위 테스트하려는 경우 자동 유효성 검사가 수행되지 않습니다.

FormCollection을 사용하고 대신 TryUpdateModel을 호출하면 유효성 검사가 수행되지만이를 사용하고 싶지 않습니다.

if 문이 문제를 해결하기 전에 TryValidateModel (model)을 호출하는 것이 좋습니다. 한 줄의 추가 코드 만 필요합니다. 나는 차라리 그것을 없앨 것입니다.

단위 테스트시 자동 유효성 검사가 발생하지 않지만 응용 프로그램이 실행될 때 발생하는 이유는 무엇입니까?

편집 : ASP.NET MVC3 RC1을 사용하고 그 결합 모델 중

답변

4

검증이 발생 어떤 차이가 (그리고 TryUpdateModel 바인딩 모델을 수행하는 경우 나 컨트롤러의 HttpContext 개체를 조롱하고있어, 얘기를 깜빡 했네요).

하지만 문제는 MVC 프레임 워크 (즉, 동작 메서드가 호출되기 전에 유효성 검사가 발생한다는 사실)입니다. 당신은 그것을 시험해서는 안됩니다.

(우리가 광범위하게 테스트하기 때문에) 해당 부분 만 작동한다고 가정하고 응용 프로그램 코드 만 테스트하면됩니다. 이 경우에 그래서, 당신은 조롱해야 할 유일한 것은 ModelState.IsValid의 반환 값이며 수동으로 유효성 검사 오류를 추가하여 그렇게 할 수 있습니다

ModelState.AddModelError("some key", "some error message") 
+0

남자, 지금은 어리석은 생각합니다. 그냥 그 일을해야하거나 조롱했다. 테스트를 통해 mock을 통해 ModelState를 설정하는 대신 유효성 검사를 통과하는 데 필요한 모든 속성/항목이있는 object/formCollection을 만듭니다. – xTRUMANx

+7

marcind, 프레임 워크가 대부분의 단위 테스트를위한 범위를 벗어나는 테스트를받습니다. 그러나 정확한 데이터 주석이 지정되었는지 테스트해야합니다. – wilk